1. 程式人生 > >python 雜湊查詢

python 雜湊查詢

 

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()