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 程式 資料結...