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

猜你喜欢

转载自www.cnblogs.com/sea-stream/p/10018088.html