- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
上机 哈希表
1.问题描述
①从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;
②采用方法解决冲突;
③查找并显示给定电话号码的记录;
④查找并显示给定用户名的记录。
2.数据结构设计
typedef struct ode{ //定义结点
char name[8]; //姓名
char address[20]; //地址
char num[11]; //电话号码
struct Node *next; //指向下一个结点指针
}LNode;
LNode * pNode, *pName;
LNode **phone;
LNode **nam;
3.函数说明
表的基本操作
void hash (char num[] ) //电话号码散列函数
void hash2(char name[]) //姓名散列函数
LNode * input ( ) //建立散列表
int append () //添加记录信息
void find(char num[]) //查找用户电话号码信息
void find2(char name[]) //查找用户姓名信息
4.编码实现include string.h
#include stdlib.h
#include stdio.h
#define NULL 0
unsigned int key;
unsigned int key2;
int* p;
typedef struct Node{ //定义结点
char name[8]; //姓名
char address[20]; //地址
char num[11]; //电话号码
struct Node *next; //指向下一个结点指针
}LNode;
LNode * pNode, *pName;
LNode **phone;
LNode **nam;
void hash (char num[] ) { //电话号码散列函数
int i=3;
key1=(int)num[2];
while(num[i]!=NULlL) {
key1+=(int)num[i];
i++;
}
key1= key1% 20;
}
void hash2(char name[]){ //姓名散列函数
int i=1;
key2=(int)name[0];
while (name[i]!=NULL) {
key2+=(int)name[i];
i++;
}
key2= key2%20;
}
LNode * input ( ){ //输入记录信息
LNode *p;
p=new LNode;
p-next=NULL;
printf(“输入姓名(最多8个字符):\n”);
scanf(“%s”, p-name);
printf(“输入地址(最多20个字符):\n”);
scanf(“%s”, p-address);
printf(“输入电话(最多11个字符):\n”);
scanf(“%s”, p-num);
return p;
}
int append (){ //添加记录信息
LNode *newphone;
LNode *newname;
newphone=input();
newname=newphone;
newphone-next=NULL;
newname-next=NULL;
hash(newphone-num);
hash2(newname- name);
newphone-next=phone[key1]-next;
phone[key]-next=newphone;
newname-next=nam[key2]-next;
nam[key2]-next=newname;
return 0;
}
void find(char num[]) { //查找用户电话号码信息
hash(num);
LNode *q=phone[key1]-next;
while (q! =NULL) {
if (strcmp (num,q-num)==0)
break;
q=q-next;
}
if (q)
文档评论(0)