C语言中如何利用哈希表实现通讯录

C语言中如何利用哈希表实现通讯录

这篇“C语言中如何利用哈希表实现通讯录”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中如何利用哈希表实现通讯录”文章吧。

1.需求分析

C语言中如何利用哈希表实现通讯录

本演示程序用C语言编写,完成哈希表的生成,电话号码的插入、以及查找等功能。
  (1)按提示输入相应的联系人的相关资料;
  (2)以相应的输出形式输出所存储的的联系人的资料;
  (3)程序可以达到建立、添加、查找、打印的功能;
  (4)程序可以判断用户输入的非法数据并引导正确的输入。

2.概要设计

存储电话号码的记录时,若在存储位置和其关键字之间建立某种确定的对应关系使得每个关键字和存储结构中一个唯一的存储位置相对应,那么在进行查找时,根据这个对应关系f就可以找到给定值K的像f(K)。若存储结构中存在关接找到所查记录。这个对应关系f称为哈希(Hash)函数或散列函数。按照以上思路建立的表称为哈希表或散列表。本案例设计主要考察散列表的建立、查找和修改。。

3.详细设计

#include<stdio.h>#include<string.h>#include<stdlib.h>typedefstructnode{charnum[11],name[15],address[20],city[15],etp[20];structnode*next;}NUM;structNUM*num_list[19];inthash(charnum[]){inti,k=0;for(i=0;num[i]!='\0';i++){k=10*k+num[i]-48;//字符转化为数字}k=(k%19);//除余法求散列地址returnk;}//c除留余数法处理电话号码voidcreate(){structnode*p1;intk1,m=0;while(m==0){printf("请输入你想添加人的信息:numnameaddresscityetp,\n");p1=(structnode*)malloc(sizeof(structnode));scanf("%s",p1->num);scanf("%s",p1->name);scanf("%s",p1->address);scanf("%s",p1->city);scanf("%s",p1->etp);k1=hash(p1->num);//用num数组值作为参数传递给哈希函数得到k1p1->next=num_list[k1];//將k1得到的值作为数组的储存地址赋值给头结点的下一个节点num_list[k1]=p1;//再將p1的数据传递给数组,故p1可以释放作为下一个节点产生printf("结束请按1,再次输入请按0\n");scanf("%d",&m);}printf("通讯表已经创建\n");}voiddlter(){charnum[11];intk1;intfind=0;structnode*f;printf("请查询要修改的联系人的电话:\n:");scanf("%s",num);k1=hash(num);f=num_list[k1];while(f!=NULL){if(strcmp(f->num,num)==0){printf("查找到了!请输入要修改的人的资料:\n");scanf("%s%s%s",f->num,f->name,f->address,f->city,f->etp);find=1;}f=f->next;}if(find=0)printf("没有找到要删除的节点!");}voidlist(){structnode*f;//打印节点指针inti;printf("打印通讯录如下:\n");for(i=0;i<19;i++){f=num_list[i];while(f!=NULL){printf("--->num:%s\tname:%s\taddress:%s\tcity:%s\tetp:%s\t\n",f->num,f->name,f->address,f->city,f->etp);f=f->next;}}}voidadd(){charnum[11],name[15],address[20],city[15],etp[20];structnode*p1;intk1;printf("请输入新添加的人的信息:电话姓名地址城市邮箱\n");p1=(structnode*)malloc(sizeof(structnode));scanf("%s%s%s",num,name,address);strcpy(p1->num,num);strcpy(p1->name,name);strcpy(p1->address,address);strcpy(p1->city,city);strcpy(p1->etp,etp);k1=hash(p1->num);p1->next=num_list[k1];num_list[k1]=p1;printf("ok\n");}voidsearch(){charnum[11];intk1;intfind=0;structnode*f;printf("请输入查询人的电话号码:");scanf("%s",num);k1=hash(num);f=num_list[k1];while(f!=NULL){if(strcmp(f->num,num)==0){printf("所要查找的联系人信息:num:%sname:%saddress:%scity:%setp:%s\n",f->num,f->name,f->address,f->city,f->etp);find=1;}f=f->next;}if(find=0)printf("此联系人没有找到!");}voidmain(){inti;charx;for(i=0;i<19;i++){num_list[i]=NULL;}while(1){//system("cls");printf("\n");printf("★★★★★★★★★通讯录★★★★★★★★★\n");printf("★◆----------------------------------◆★\n");printf("★|       1.建立       |★\n");printf("★|                 |★\n");printf("★|       2.查找       |★\n");printf("★|                 |★\n");printf("★|       3.添加       |★\n");printf("★|                 |★\n");printf("★|       4.修改       |★\n");printf("★|                 |★\n");printf("★|       5.打印       |★\n");printf("★|                 |★\n");printf("★|       6.结束       |★\n");printf("★◆----------------------------------◆★\n");printf("★★★★★★★★★★★★★★★★★★★★★\n");//x=getchar();scanf("%s",&x);switch(x){case'1':create();break;case'2':search();break;case'3':add();break;case'4':dlter();break;case'5':list();break;case'6':return;default:printf("请重新输入;\n");}}}

以上就是关于“C语言中如何利用哈希表实现通讯录”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注恰卡编程网行业资讯频道。

发布于 2022-04-03 22:40:39
收藏
分享
海报
0 条评论
23
上一篇:C语言中的基本算术运算符有哪些 下一篇:C语言中如何实现插入排序
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码