from functools import reduce
from operator import add
from random import seed,randint
class Node:
def __init__(self,key,prev=None,next=None):
self.key,self.prev,self.next=key,prev,next
class HashTable:
size=97
def hfunction(key):
strs=str(key)
return reduce(add,map(ord,strs),0)%HashTable.size
def __init__(self):
self.T=[Node('dummy') for i in range(self.size)]
for x in self.T:
x.prev=x.next=x
def __getitem__(self,k):
return self.T[k]
def __setitem__(self,k,x):
self.T[k]=x
def insert(self,x):
hkey=HashTable.hfunction(x.key)
x.prev,x.next=self.T[hkey],self.T[hkey].next
self.T[hkey].next,self.T[hkey].next.prev=x,x
def search(self,key):
hkey=self.hfunction(key)
x=self.T[hkey]
while x!=None and x.key!=key:
x=x.next
return x
def delete(self,x):
x.prev.next,x.next.prev=x.next,x.prev
def print(self):
for i in range(0,self.size):
x=self.T[i]
if x.next==x:
continue
print('key=',str(i),':',end='')
while(True):
x=x.next
if x==self.T[i]:
break
print(x.key,end=' ')
print()
h=HashTable()
seed(0)
for i in range(0,100):
x=randint(0,10000000)
h.insert(Node(x))
h.print()
chap11 哈希表链接法
最新推荐文章于 2020-09-11 13:15:39 发布