class HashTable:
def __init__(self, size=11):
self.size = size
self.slots = [None] * self.size
self.data = [None] * self.size
def put(self, key, value):
if isinstance(key, str):
newkey = ord(key)
else:
newkey = key
hashvalue = self.hashfunction(newkey, self.size)
if self.slots[hashvalue] == None:
self.slots[hashvalue] = key
self.data[hashvalue] = value
else:
if self.slots[hashvalue] == key:
self.data[hashvalue] = value
else:
nextslot = self.rehash(hashvalue, self.size)
while self.slots[nextslot] != None and self.slots[nextslot] != key:
nextslot = self.rehash(nextslot, self.size)
if self.slots[nextslot] == None:
self.slots[nextslot] = key
self.data[nextslot] = value
else:
self.data[nextslot] = value
def hashfunction(self, key, size):
return key % size
def rehash(self, oldhash, size):
return (oldhash + 1) % size
def get(self, key):
if isinstance(key, str):
newkey = ord(key)
else:
newkey = key
startslot = self.hashfunction(newkey, self.size)
pos = startslot
while 1:
if self.slots[pos] == key:
return self.data[pos]
else:
pos = self.rehash(pos, self.size)
if pos == startslot:
raise KeyError(f'{key} not found')
def __getitem__(self, key):
return self.get(key)
def __setitem__(self, key, value):
self.put(key, value)
def len(self):
count = 0
for i in self.slots:
if i != None:
count += 1
return count
def __delitem__(self, key):
if isinstance(key, str):
newkey = ord(key)
else:
newkey = key
startslot = self.hashfunction(newkey, self.size)
pos = startslot
while 1:
if self.slots[pos] == newkey:
self.slots[pos] = None
self.data[pos] = None
break
else:
pos = self.rehash(pos, self.size)
if pos == startslot:
raise KeyError(f'{key} not found')
def __contains__(self, key):
if isinstance(key, str):
newkey = ord(key)
else:
newkey = key
startslot = self.hashfunction(newkey, self.size)
pos = startslot
while 1:
if self.slots[pos] == newkey:
return True
else:
pos = self.rehash(pos, self.size)
if pos == startslot:
return False
# def __iter__(self):
# return iter(self.slots)
def __repr__(self):
s = '{'
for i in self.slots:
if i is not None:
value = self.data[self.slots.index(i)]
if isinstance(i, str):
if isinstance(value, str):
s = s + f"'{i}' : '{value}' , "
else:
s = s + f"'{i}' : {value} , "
else:
if isinstance(value, str):
s = s + f"{i} : '{value}' , "
else:
s = s + f"{i} : {value} , "
s = s.rstrip(', ')
s = s + '}'
return s
散列表(哈希表)HashTable
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內容
- hash table 中文叫做散列表或者是哈希表,其實是一個意思https://github.com/googeg...