Python實現Map資料結構

2021-08-21 04:08:03 字數 2145 閱讀 8452

class hashtable:

def __init__(self):

# 初始化兩個list,乙個用來儲存鍵值,乙個用來儲存值

self.size = 11

self.slots = [none] * self.size

self.data = [none] * self.size

# 定義hash函式,使用餘數法

def hashfunction(self, key, size):

return (key % size)

# 定義線性探測hash函式

def rehash(self, oldhash, size):

return (oldhash + 1) % size

# 插入鍵值對

def put(self, key, data):

# 得到hash值

hashvalue = self.hashfunction(key, len(self.slots))

# 查詢當前hash值對應位置的鍵值是否為空,為空則插入

if self.slots[hashvalue] == none:

self.slots[hashvalue] = key

self.data[hashvalue] = data

# 不為空則更新

else:

if self.slots[hashvalue] == key:

self.data[hashvalue] = data

else:

# 否則繼續查詢下乙個位置,這裡使用線性探測器去解決hash衝突問題

nextslot = self.rehash(hashvalue, len(self.slots))

while self.slots[nextslot] != none and self.slots[nextslot] != key:

nextslot = self.rehash(nextslot, len(self.slots))

if self.slots[nextslot] == none:

self.slots[nextslot] = key

self.data[nextslot] = data

else:

self.data[nextslot] = data

# 過載python的magic函式

def __getitem__(self, key):

return self.get(key)

# 過載python的magic函式

def __setitem__(self, key, data):

self.put(key, data)

# 拿鍵值方法和存放方法一樣

def get(self, key):

startslot = self.hashfunction(key, len(self.slots))

data = none

flag = false

stop = false

pos = startslot

while self.slots[startslot] != none and not flag and not stop:

if self.slots[pos] == key:

flag = true

data = self.data[pos]

else:

pos = self.rehash(pos, len(self.slots))

if pos == startslot:

stop = true

return data

if __name__ == '__main__':

h = hashtable()

h[54] = 'cat'

h[26] = 'dog'

h[93] = 'lion'

h[17] = 'tiger'

h[77] = 'bird'

h[31] = 'cow'

h[44] = 'goat'

h[55] = 'pig'

h[20] = 'chicken'

h[8] = 'mouse'

print(h.slots)

print(h.data)

Map與資料結構

上篇中介紹了collection中arraylist和linkedlist和在資料結構中的分析。但在,由於collection是無論是基於陣列的arraylist還是基於鍊錶的linkedlist它都沒有辦法儲存有關係的資料,比如乙個人的姓名 身份證,這樣有關係的資料。因此就有了map介面。arra...

資料結構之Java實現底層Map

map是一種對映類集合,相比於set既有鍵也有值,以一對鍵值對形式儲存,不能存在相同元素 鍵不能相同 首先和前面的set一樣,定義乙個map介面類,分別用鍊錶和二分搜尋樹來實現,由於結點元素需要儲存的是一對鍵值對,所以不用前面文章的鍊錶和二分搜尋樹,重新定製一下結點資訊和相應的資料結構,下面是實現過...

資料結構 Python實現

參考部落格 演算法和資料結構 一 棧和佇列 python資料結構 棧 佇列的實現 一 python資料結構 棧 佇列的實現 二 python資料結構 鍊錶的實現 資料結構 定義 簡單來說,資料結構就是設計資料以何種方式組織並儲存在計算機中。比如 列表 集合與字典等都是一種資料結構。ps 程式 資料結...