python 哈希查找
阿新 • • 發佈:2018-11-26
num 結束 != 結構 pytho 哈希函數 ptr current 節點
import random INDEXBOX=7 #哈希表元素個數 MAXNUM=13 #數據個數 class Node: #聲明鏈表結構 def __init__(self,val): self.val=val self.next=None global indextable indextable=[Node]*INDEXBOX #聲明動態數組 def create_table(val): #建立哈希表子程序 global indextable newnode=Node(val) myhash=val%7 #哈希函數除以7取余數 current=indextable[myhash] if current.next==None: indextable[myhash].next=newnode else: while current.next!=None: current=current.next current.next=newnode #將節點加入鏈表 def print_data(val): #打印哈希表子程序 globalindextable pos=0 head=indextable[val].next #起始指針 print(‘ %2d:\t‘ %val,end=‘‘) #索引地址 while head!=None: print(‘[%2d]-‘ %head.val,end=‘‘) pos+=1 if pos % 8==7: print(‘\t‘) head=head.next print() def findnum(num): #哈希查找子程序 i=0 myhash =num%7 ptr=indextable[myhash].next while ptr!=None: i+=1 if ptr.val==num: return i else: ptr=ptr.next return 0 #主程序 data=[0]*MAXNUM index=[0]*INDEXBOX for i in range(INDEXBOX): #清除哈希表 indextable[i]=Node(-1) print(‘原始數據:‘) for i in range(MAXNUM): data[i]=random.randint(1,30) #隨機數建立原始數據 print(‘[%2d] ‘ %data[i],end=‘‘) #並打印出來 if i%8==7: print() for i in range(MAXNUM): create_table(data[i]) #建立哈希表 print() while True: num=int(input(‘請輸入查找數據(1-30),結束請輸入-1:‘)) if num==-1: break i=findnum(num) if i==0: print(‘#####沒有找到 %d #####‘ %num) else: print(‘找到 %d,共找了 %d 次!‘ %(num,i)) print(‘\n哈希表:‘) for i in range(INDEXBOX): print_data(i) #打印哈希表 print()
python 哈希查找