#include<iostream>
#include<string>
using namespace std;
#define HASH_LENGTH 50 //哈希表的长度
#define M 47 //随机数
#define NAME_NO 30 //人名的个数
typedef struct
{ char *py; //名字的拼音
int k; //拼音所对应的整数
}NAME;
NAME NameList[HASH_LENGTH]; //全局变量NAME
typedef struct //哈希表
{ char *py; //名字的拼音
int k; //拼音所对应的整数
int si; //查找长度
}HASH;
HASH HashList[HASH_LENGTH]; //全局变量HASH
void InitNameList() //姓名(结构体数组)初始化
{ char *f;
int r,s0,i;
NameList[0].py="baojie";
NameList[1].py="chengaoyang";
NameList[2].py="chenguangzhong";
NameList[3].py="chenliangliang";
NameList[4].py="chenyongzhou";
NameList[5].py="fengchao";
NameList[6].py="gexiangfeng";
NameList[7].py="huting";
NameList[8].py="huangpinjin";
NameList[9].py="jiangxiaojia";
NameList[10].py="laidongjie";
NameList[11].py="liyexiao";
NameList[12].py="lidaohui";
NameList[13].py="lijue";
NameList[14].py="lizhuoqun";
NameList[15].py="linfujun";
NameList[16].py="luobin";
NameList[17].py="luokeqing";
NameList[18].py="nichao";
NameList[19].py="panhuafeng";
NameList[20].py="sijun";
NameList[21].py="songzhanhui";
NameList[22].py="sunzhengqing";
NameList[23].py="wanghaofeng";
NameList[24].py="wangjunshuai";
NameList[25].py="wangqinde";
NameList[26].py="wangzejun";
NameList[27].py="wangkeke";
NameList[28].py="weixing";
NameList[29].py="wurenke";
for(i=0;i<NAME_NO;i++)
{ s0=0;
f=NameList[i].py;
for(r=0;*(f+r)!='/0';r++)
/* 方法:将字符串的各个字符所对应的ASCII码相加,所得的整数做为哈希表的关键字*/
s0=*(f+r)+s0;
NameList[i].k=s0;
}
}
void CreateHashList() //建立哈希表
{ int i;
for(i=0; i<HASH_LENGTH;i++)
{ HashList[i].py="";
HashList[i].k=0;
HashList[i].si=0;
}
for(i=0;i<HASH_LENGTH;i++)
{ int sum=0;
int adr=(NameList[i].k)%M;
//哈希函数
int d=adr;
if(HashList[adr].si==0) //如果不冲突
{ HashList[adr].k=NameList[i].k;
HashList[adr].py=NameList[i].py;
注:数据结构严蔚敏版实习报告