我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

1.需求分析

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

2.概要设计

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

3.详细设计

#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct node {   char num[11],name[15],address[20],city[15],etp[20];   struct node *next;   }NUM;   struct NUM *num_list[19];  int hash(char num[]) {   int i,k=0;   for(i=0;num[i]!='\0';i++)   {     k=10*k+num[i]-48;  //字符转化为数字   }   k=(k%19);    //除余法求散列地址   return k; }//c除留余数法处理电话号码 void create() {   struct node *p1;   int k1,m=0;   while(m==0)   {    printf("请输入你想添加人的信息:num name address city etp,\n");    p1=(struct node *)malloc(sizeof(struct node));    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数组值作为参数传递给哈希函数得到k1    p1->next=num_list[k1];//將k1得到的值作为数组的储存地址赋值给头结点的下一个节点    num_list[k1]=p1;//再將p1的数据传递给数组,故p1可以释放作为下一个节点产生    printf("结束请按1,再次输入请按0\n");    scanf("%d",&m);   }   printf("通讯表已经创建\n"); }   void dlter() {    char num[11];   int k1;   int find=0;   struct node *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("没有找到要删除的节点!");     } void list() {   struct node *f;//打印节点指针   int i;    printf("打印通讯录如下:\n");   for(i=0;i<19;i++)     {       f=num_list[i];       while(f!=NULL)       {         printf("--->num:%s\t name:%s\t address:%s\t city:%s\t etp:%s\t \n",f->num,f->name,f->address,f->city,f->etp);         f=f->next;        }     }    }   void add() {   char num[11],name[15],address[20],city[15],etp[20];   struct node *p1;   int k1;   printf("请输入新添加的人的信息:电话 姓名 地址 城市 邮箱\n");    p1=(struct node *)malloc(sizeof(struct node));    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"); } void search() {   char num[11];   int k1;   int find=0;   struct node *f;     printf("请输入查询人的电话号码:");     scanf("%s",num);     k1=hash(num);     f=num_list[k1];     while(f!=NULL)     {       if(strcmp(f->num,num)==0)       {         printf("所要查找的联系人信息 :num:%s name:%s address:%s city:%s etp:%s\n",f->num,f->name,f->address,f->city,f->etp);         find=1;       }       f=f->next;     }     if(find=0)       printf("此联系人没有找到!");     } void main() {   int i;   char x;   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语言中如何利用哈希表实现通讯录”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

C语言如何实现通讯录小项目

这篇文章主要介绍了C语言如何实现通讯录小项目,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。本文实例为大家分享了C语言实现通讯录小项目的具体代码,供大家参考,具体内容如下编写程
2023-06-15

C语言单链表如何实现通讯录管理系统

这篇文章将为大家详细讲解有关C语言单链表如何实现通讯录管理系统,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通讯录管理系统保存人的信息有: 名字 name电话 telephone性别 sex年
2023-06-15

C语言如何实现通讯录系统程序

本文小编为大家详细介绍“C语言如何实现通讯录系统程序”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言如何实现通讯录系统程序”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言利用链表增、删、改、查功能以及文件
2023-07-02

如何使用C语言代码实现通讯录功能

今天小编给大家分享一下如何使用C语言代码实现通讯录功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。首先创建一个test.c
2023-07-02

C语言链表案例学习之通讯录的实现

为了将所学到的链表的知识进行巩固学习,做到学以致用,本文将利用链表制作一个简单的通讯录。文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
2022-11-13

如何使用C语言实现本地socke通讯

这篇文章主要介绍了如何使用C语言实现本地socke通讯,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、概述  使用本地socket通讯可以实现进程之间的通讯。  相关函数描
2023-06-22

C语言中怎么实现一个通讯录系统

C语言中怎么实现一个通讯录系统,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。全部代码如下所示:#include #include usi
2023-06-20

怎么用C语言脚本实现简易通讯录

这篇文章主要介绍“怎么用C语言脚本实现简易通讯录”,在日常操作中,相信很多人在怎么用C语言脚本实现简易通讯录问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用C语言脚本实现简易通讯录”的疑惑有所帮助!接下来
2023-06-29

C语言中单链表如何实现

这篇文章主要介绍“C语言中单链表如何实现”,在日常操作中,相信很多人在C语言中单链表如何实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中单链表如何实现”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-07-04

怎么用C语言实现简单通讯录管理系统

本篇内容主要讲解“怎么用C语言实现简单通讯录管理系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用C语言实现简单通讯录管理系统”吧!C语言实现的通讯录管理系统,供大家参考,具体内容如下设计
2023-06-20

C语言使用realloc函数实现通讯录源码分析

什么是动态通讯录,就是在静态的基础上改进了一下,不在使用数组,而是使用指针和动态内存开辟的函数,当空间不够的时候,便进行增容
2023-02-01

C++如何使用链表存储实现通讯录功能管理

本文小编为大家详细介绍“C++如何使用链表存储实现通讯录功能管理”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++如何使用链表存储实现通讯录功能管理”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。代码详情头文件
2023-07-02

C语言如何实现通用数据结构中的通用集合

本篇文章为大家展示了C语言如何实现通用数据结构中的通用集合,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。这是在通用链表的基础上实现的集合,关于链表的实现参见:C语言实现通用数据结构之通用链表注意集合
2023-06-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录