自建哈希表

tech2025-08-03  9

class LinkList(): class Node(): def __init__(self,item=None): self.item=item self.next=None class LinkListIterator(): def __init__(self,node): self.node=node def next(self): if self.node: cur_node=self.node self.node=cur_node.next return cur_node.item else: raise StopIteration def __iter__(self): return self def __init__(self): self.head=None def append(self,item): node=self.Node(item) if not self.head: self.head=node else: node.next=self.head self.head=node def delete(self,obj): CurNode=self.head while CurNode: if CurNode.next.item==obj: CurNode.next=CurNode.next.next return True CurNode=CurNode.next else: raise IndexError('linklist have no num %d'%obj) def find(self,obj): for n in self: if n==obj: return True else: return False def __iter__(self): return self.LinkListIterator(self.head) def __repr__(self): return '<<'+','.join(map(str,self))+'>>' class HashTable(): def __init__(self,size):#hashtable len:size self.size=size self.hashtable=[LinkList() for i in range(size)] def append(self,item): self.hashtable[self.hash_func(item)].append(item) def hash_func(self,item): return item%self.size def __repr__(self): return ','.join(map(str,self.hashtable)) def delete(self,obj): k=self.hash_func(obj) if self.hashtable[k].find(obj): self.hashtable[k].delete(obj) return True else: raise IndexError('hashtable have no num %d'%obj) def find(self,obj): k=self.hash_func(obj) for n in self.hashtable[k]: if n==obj: return True else: return False ll=LinkList() ll.append(1) ll.append(2) ll.append(3) ll.append(4) ll.append(5) print ll print ll.find(3) ll.delete(3) print ll h=HashTable(10) for i in range(100): h.append(i) print h print h.find(44) h.delete(44) print h print h.find(44) h.delete(111)

头插链表,长度为size的哈希表。(这个代码对齐方式我真的搞不定。。) 输出结果: <<5,4,3,2,1>> True <<5,4,2,1>> <<90,80,70,60,50,40,30,20,10,0>>,<<91,81,71,61,51,41,31,21,11,1>>,<<92,82,72,62,52,42,32,22,12,2>>,<<93,83,73,63,53,43,33,23,13,3>>,<<94,84,74,64,54,44,34,24,14,4>>,<<95,85,75,65,55,45,35,25,15,5>>,<<96,86,76,66,56,46,36,26,16,6>>,<<97,87,77,67,57,47,37,27,17,7>>,<<98,88,78,68,58,48,38,28,18,8>>,<<99,89,79,69,59,49,39,29,19,9>> True <<90,80,70,60,50,40,30,20,10,0>>,<<91,81,71,61,51,41,31,21,11,1>>,<<92,82,72,62,52,42,32,22,12,2>>,<<93,83,73,63,53,43,33,23,13,3>>,<<94,84,74,64,54,34,24,14,4>>,<<95,85,75,65,55,45,35,25,15,5>>,<<96,86,76,66,56,46,36,26,16,6>>,<<97,87,77,67,57,47,37,27,17,7>>,<<98,88,78,68,58,48,38,28,18,8>>,<<99,89,79,69,59,49,39,29,19,9>> False Traceback (most recent call last): File “1.py”, line 418, in h.delete(111) File “1.py”, line 390, in delete raise IndexError(‘hashtable have no num %d’%obj) IndexError: hashtable have no num 111

最新回复(0)