zoukankan      html  css  js  c++  java
  • 实验8 Hash表的建立和查找

    根据本班同学的学号建立hash表,Hash(d)=d%31,其中d为每个同学的学号后4位,冲突解决办法使用线性探测再散列方法。

    #include<stdio.h>
    #include<stdlib.h>
    #define M 32
    #define P 31
    typedef struct 
    {
        long long int ID;
        int flag;
    }Hash;
    Hash hashtable[32];
    void  initHash()
    {
        for(int i=1;i<=M;i++)
        {
            hashtable[i].flag=1;
        }
    }
    int getHashAdd(int d)
    {
        return d%P;
    }
    int insert(long long int id,int d)
    {
        int add=getHashAdd(d);
        if(hashtable[add].flag==1)
        {
            hashtable[add].ID=id;
            hashtable[add].flag=0;
        }
        else
        {
            while(hashtable[add].flag==0)
            {
                add++;
                if(add==M+1)
                add=1;
            }
            hashtable[add].ID=id;
            hashtable[add].flag=0;
        }
    }
    int find(int d,long long int id)
    {
        int add=getHashAdd(d);
        int x=add;
        while(!(hashtable[add].flag==0&&hashtable[add].ID==id))
        {
            add++;
            if(add==M+1)
            add=1;
            if(add==x)
            {
                return -1; 
            }
        }
        return add;
    }
    int main()
    {
        long long int ID[32],id;
        int d,address;
        initHash();
        printf("请输入12位学号:
    ");
        for(int i=1;i<=32;i++)
        {
            scanf("%lld",&ID[i]);
            d=ID[i]%22016121000;
            insert(ID[i],d);
        }
        printf("请输入要查找的学号:
    ");
        while(1)
        {
        scanf("%lld",&id);
        d=id%22016121000;
        address=find(d,id);
        if(address==-1)
        printf("没有找到");
        else
        printf("%d %lld
    ",address,hashtable[address].ID);
        } 
     } 

    测试数据:

    220161214062
    220161214022
    220161214001
    220161214010
    220161214040
    220161214121
    220161214107
    220161214005
    220161214016
    220161214113
    220161214070
    220161214093
    220161214127
    220161214041
    220161214088
    220161214080
    220161214015
    220161214008
    220161214059
    220161214025
    220161214018
    220161214068
    220161214110
    220161214118
    220161214075
    220161214017
    220161214066
    220161214109
    220161214009
    220161214081
    220161214069
    220161214042

    测试结果:

    220161214062 1
    220161214022 23
    220161214001 2
    220161214010 11
    220161214040 10
    220161214121 29
    220161214107 15
    220161214005 6
    220161214016 17
    220161214113 21
    220161214070 9
    220161214093 3
    220161214127 4
    220161214041 12
    220161214088 27
    220161214080 19
    220161214015 16
    220161214008 13
    220161214059 30
    220161214025 26
    220161214018 20
    220161214068 7
    220161214110 18
    220161214118 28
    220161214075 14
    220161214017 22
    220161214066 5
    220161214109 24
    220161214009 25
    220161214081 31
    220161214069 8
    220161214042 32

  • 相关阅读:
    Kafka速览
    分布式消息中间件(二)ActiveMQ
    PageUtil 分页
    Tomcat配置
    CryptographyUtil盐加密
    InitComponent的使用
    Shiro权限总结
    【转】Java自学之路——by马士兵
    ExcelUtil
    Java操作Excel之Poi
  • 原文地址:https://www.cnblogs.com/accept/p/8175961.html
Copyright © 2011-2022 走看看