1. 程式人生 > >python 哈希查找

python 哈希查找

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): #打印哈希表子程序 global
indextable 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 哈希查找