哈希表的建立

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

#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

原文地址:https://www.cnblogs.com/paradises/p/2872304.html