zoukankan      html  css  js  c++  java
  • 哈希表的建立

    今天效率好低,方法不太正确,需要改进。

    #include<iostream>
    using namespace std;
    
    #define M 47//取模值为47
    
    typedef struct Name
    {//定义结构体储存名字
        char *py;
        int key;
    }*NameList;
    
    typedef struct HASH
    {
         char *py;
        int key;
        int si;
    }*HASHList;
    
    Name name[50];//表长为50
    HASH hashs[50];
    
    void memset()
    {//名字初始化
        int i,r,s0;
        char *f;
        name[0].py="jiaguanghu";
        name[1].py="nima";
            name[2].py="liyili";
            name[3].py="xujiafeng";
            name[4].py="huangliang";
            name[5].py="huangbaoguang";
            name[6].py="lvxin";
            name[7].py="zhuxinpeng";
            name[8].py="yanbiao";
            name[9].py="zhuweiwei";
            name[10].py="lanjunfan";
            name[11].py="sunxiaoyuan";
           name[12].py="qifu";
           name[13].py="lvmenglei";
           name[14].py="wangrenzhang";
           name[15].py="wanghai";
           name[16].py="kuangyang";
           name[17].py="zhangjingwei";
           name[18].py="zhangteng";
            name[19].py="zhangtian";
            name[20].py="wuwenjie";
            name[21].py="zhanhan";
            name[22].py="zhangzheng";
            name[23].py="huangpengfei";
            name[24].py="qushen";
            name[25].py="weidi";
            name[26].py="chengjin";
            name[27].py="yangshaojun";
            name[28].py="lipeng";
            name[29].py="chengwenwen";
        for(i=0;i<30;i++)
        {
            s0=0;
            f=name[i].py;
            for(r=0;*(f+r)!='\0';r++)
                s0+=int (*(f+r));//求出每个名字对应的整数并储存在name[].key中
            name[i].key=s0;
        }
    }
    
    void creathash()
    {//建立哈希表
        int i;
        for(i=0;i<50;i++)
        {//哈希函数初始化
            hashs[i].key=0;
            hashs[i].si=0;
            hashs[i].py="";
        }
    
        for(i=0;i<50;i++)
        {
            int d,addr;
            addr=name[i].key%M;//去整取余法
            d=addr;
            if(hashs[d].si==0)
            {//若未出现冲突
                hashs[addr].py=name[i].py;
                hashs[addr].key=name[i].key;
                hashs[addr].si=1;
            }
            else
            {//出现冲突
                int sum=0;
                do
                {
                    d=(d+name[i].key%10+1)%M;//伪随机数列探测
                    sum+=1;//记录探测次数
                }while(hashs[d].key!=0);
    
                hashs[d].py=name[i].py;
                hashs[d].key=name[i].key;
                hashs[d].si=sum+1;
            }
        }
    }
          int main()
    {
             memset();
             creathash();
         
            return 0;
    }

     只建立了哈希函数,明天考完试再实现查找功能。

      2013-01-22   23:17:17

  • 相关阅读:
    python3 5个带key内置函数
    python3常用内置函数总结
    python入门基础-函数装饰器的理解
    python入门基础-三元表达式、命名空间、作用域、函数名本质、闭包
    python入门基础-初识函数
    第二章001编写脚本
    Appium 自动化测试第一天——基础知识
    python基础-读取文件
    linux6.4 安装python3 pip setuptools
    selenium+python之HTML测试报告
  • 原文地址:https://www.cnblogs.com/paradises/p/2872304.html
Copyright © 2011-2022 走看看