数据结构课程设计计信系教师通信录查询系统(3)

2019-04-09 11:51

《数据结构》课程设计报告

(3)关键字的比较

Status eq(NA x,NA y){//关键字比较,相等返回SUCCESS;否则返回FAILURE

if(strcmp(x,y)==0)

return SUCCESS; else return FAILURE;

}Status NUM_BER; //记录的个数

(4)对姓名的折叠处理

long fold(NA s){//人名的折叠处理

char *p; long sum=0; NA ss;

strcpy(ss,s); //复制字符串,不改变原字符串的大小写 strupr(ss); //将字符串ss转换为大写形式 p=ss; while(*p!='\\0') sum+=*p++;

printf(\//将字符串转换成一个int 型的值用于hash表的计算比较

return sum; }

(5)建立哈希函数(两个) int Hash1(NA str){ //哈希函数

long n; int m;

n=fold(str); //先将用户名进行折叠处理

m=n%HASHSIZE;//折叠处理后的数,用除留余数法构造哈希函数 return m; }

10

//并返回模值

《数据结构》课程设计报告

int Hash2(NA str){ //哈希函数

long n; int m;

n = atoi(str); //把字符串转换成整型数. m=n%HASHSIZE; return m; }

(6)解决冲突

Status collision(int p,int &c){ //冲突处理函数,采用二次探测再散列法解决冲突

int i,q; i=c/2+1; while(i

if(c%2==0){

c++;

q=(p+i*i)%HASHSIZE;

return q; //并返回模值

if(q>=0) else } else{

i=c/2+1;

q=(p-i*i)%HASHSIZE; c++; if(q>=0) Else } }

return FAILURE; }

11

return q;

i=c/2+1;

《数据结构》课程设计报告

(7)创建以姓名为关键字哈希表

void CreateHash1(HashTable* H,Record* a){ //建表,以人的姓名为关键字,建立相应的散列表

//若哈希地址冲突,进行冲突处理 benGetTime(); int i,p=-1,c,pp;

for(i=0;i

p=Hash1(a[i].name); pp=p;

while(H->elem[pp]!=NULL) { pp=collision(p,c); if(pp<0){

printf(\第%d记录无法解决冲突\需要显示冲突次数时输出 continue;

}//无法解决冲突,跳入下一循环 }

H->elem[pp]=&(a[i]); //求得哈希地址,将信息存入 H->count++;

printf(\第%d个记录冲突次数为%d。\\n\需要显示冲突次数时输出 }

printf(\以教师姓名建散列表完成!\\n此哈希表容量为%d,当前表内存储的记录个数为%d.\\n\

benGetTime(); }

12

《数据结构》课程设计报告

(8)查找以姓名为关键字的哈希表(前提条件是步骤7要先创建好哈希函数) void Search_name(HashTable* H,int &c){//在通讯录里查找姓名关键字,若查找成功,显示信息

//c用来记录冲突次数,查找成功时显示冲突次数

benGetTime(); NA str;

printf(\请输入要查找记录的姓名:\\n\scanf(\int p,pp; p=Hash1(str); pp=p;

while((H->elem[pp]!=NULL)&&(eq(str,H->elem[pp]->name)==-1)) pp=collision(p,c);

if(H->elem[pp]!=NULL&&eq(str,H->elem[pp]->name)==1){

printf(\查找成功!\\n查找过程冲突次数为%d.以下是您需要要查找的信息:\\n\\n\printf(\

:

%s\\n

%s\\n

址:%s\\n\}

else printf(\此人不存在,查找不成功!\\n\

benGetTime(); }

(9)创建以电话号码为关键字的哈希表

void CreateHash2(HashTable* H,Record* a){//建表,以电话号码为关键字,建立相应的散列表

//若哈希地址冲突,进行冲突处理

benGetTime(); int i,p=-1,c,pp; for(i=0;i

13

《数据结构》课程设计报告

p=Hash2(a[i].tel); pp=p;

while(H->elem[pp]!=NULL) { pp=collision(p,c); if(pp<0){

printf(\第%d记录无法解决冲突\需要显示冲突次数时输出 continue;

}//无法解决冲突,跳入下一循环 }

H->elem[pp]=&(a[i]);//求得哈希地址,将信息存入 H->count++;

printf(\第%d个记录冲突次数为%d。\\n\需要显示冲突次数时输出 }

printf(\以教师电话号码建散列表完成!\\n此哈希表容量为%d,当前表内存储的记录个数为%d.\\n\

benGetTime(); }

(10)查找以电话号码为关键字的哈希表(前提为步骤9要先创建好哈希函数) void Search_phonenumber(HashTable* H,int &c){//在通讯录里查找电话号码关键字,若查找成功,显示信息

//c用来记录冲突次数,查找成功时显示冲突次数

benGetTime(); NA tele;

printf(\请输入要查找记录的电话号码:\\n\scanf(\int p,pp; p=Hash2(tele); pp=p;

while((H->elem[pp]!=NULL)&&(eq(tele,H->elem[pp]->tel)==-1)) pp=collision(p,c);

14


数据结构课程设计计信系教师通信录查询系统(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:微观经济学 第三章 参考答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: