自建哈希表

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值