• 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:	' %val,end='')   #索引地址
        while head!=None:
            print('[%2d]-' %head.val,end='')
            pos+=1
            if pos % 8==7:
                print('	')
            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('
    哈希表:')
    for i in range(INDEXBOX):
        print_data(i)          #打印哈希表
    print()
  • 相关阅读:
    记录移动端原生开发基础样式
    windows关闭打开应用的时候的安全弹窗
    thinkPad触控板手势安装
    git修改账号密码
    ssh免密登录失效处理
    xxl-rpc remoting error(Connection refused (Connection refused)), for url : http://xxxxxx:19997/run
    utools好用插件分享
    Android Studio打包apk闪退处理
    maven下载jar包失败处理
    微信文件下载位置
  • 原文地址:https://www.cnblogs.com/sea-stream/p/10018088.html
Copyright © 2020-2023  润新知