from functools import reduce
from operator import add
class HashTable:
size=97
def hash(k,i):
return (reduce(add,map(ord,str(k)),0)+i)%HashTable.size
def __init__(self):
self.T=[None for i in range(HashTable.size)]
def insert(self,k):
i=0
while(True):
j=HashTable.hash(k,i)
if self.T[j]==None:
self.T[j]=k
return j
else: i+=1
if(i==HashTable.size): break
raise IndexError("hash table overflow")
def search(self,k):
i=0
while(True):
j=HashTable.hash(k,i)
if(self.T[j]==k): return j
i+=1
if self.T[j]==None or i==HashTable.size: break
return None
def delete(self,k):
i=self.search(k)
if i!=None:
self.T[i]=None
def print(self):
for i in range(self.size):
if self.T[i]!=None:
print('key ',str(i),':',str(self.T[i]))
from random import seed,randint
seed(0)
h=HashTable()
for i in range(10):
x=randint(0,100000)
h.insert(x)
h.print()
print('after delete')
h.delete(5306)
h.print()
chap11 哈希表实现-开放寻址法
最新推荐文章于 2024-01-20 05:30:00 发布