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语言通讯录管理系统课程设计
  • C语言通讯录管理系统完整版
  • C语言实现通讯录功能
  • C语言使用结构体实现简单通讯录
  • C语言通讯录实例分享
  • 用C语言实现简易通讯录
  • C语言实现一个通讯录
  • C语言实现通讯录系统
  • C语言实现简单的通讯录
  • 使用C语言打造通讯录管理系统和教学安排系统的代码示例
(0)

相关推荐

  • C语言通讯录管理系统课程设计

    本文实例为大家分享了C语言通讯录管理系统课程设计,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <windows.h> struct Sign{ char name[8]; char sex[4]; char birthday[12]; char phone[11]; char postcode[7]; char addr[30]; struct Sign *next; }pe; char Ph

  • C语言通讯录实例分享

    本文实例为大家分享了C语言通讯录实例的具体代码,供大家参考,具体内容如下 main.c文件: // // main.c // c语言通讯录 // // Created by stevenchang on 9/6/15. // Copyright (c) 2015 cz. All rights reserved. // /** 1.添加联系人 2.删除联系人 3.更新联系人 4.显示所有联系人 5.查找联系人 6.退出系统 */ #include <stdio.h> int main(int a

  • 使用C语言打造通讯录管理系统和教学安排系统的代码示例

    通讯录管理系统 实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能.. 完整的代码如下: #include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计

  • C语言通讯录管理系统完整版

    C语言实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能.. 完整的代码如下: #include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计算字节//

  • C语言实现一个通讯录

    实现一个通讯录,通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名.性别.年龄.电话.住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6.  清空所有联系人 7. 以名字排序所有联系人 没有开辟动态内存的方法: 头文件:test.h #ifndef __CONTACT #define __CONTACT #define _CRT_SECURE_NO_WARNINGS 1 #include<

  • C语言实现通讯录功能

    本文实例为大家分享了C语言实现通讯录功能的具体代码,供大家参考,具体内容如下 先定义头文件 #ifndef __CONTACT_H__ #define __CONTACT_H__ #define NAME_LEN 10 #define SEX_LEN 6 #define TELE_LEN 12 #define ADDR_LEN 20 #define MAX_PEO 1000 typedef struct PEO { char name[NAME_LEN]; int age; char sex[S

  • C语言实现简单的通讯录

    用C语言写了一个简单的通讯录,说简单一是功能简单,二是也没有加读写文件操作,只是作为链表操作的一个练习,希望能给这方面的新手一此引导和帮助. 代码: /* 转贴请注明出处 */ /* 作者:小浦原(ID:blueboy82006) */ /* http://blog.csdn.net/blueboy82006 */ #include <stdio.h> #include <stdlib.h> #include<string.h> #include<ctype.h&

  • C语言实现通讯录系统

    C语言通讯录系统实现,供大家参考,具体内容如下 需求分析: 利用文件读,写的方法 实现增加通讯录联系人信息 实现删除通讯录联系人信息 实现查找通讯录联系人信息 实现修改通讯录联系人信息 实现查看现有通讯录联系人信息 代码实现: // main.c // C语言通讯录实现 // // Created by Brisinga on 15/10/14. // Copyright © 2015年 yan. All rights reserved. // #include <stdio.h> #incl

  • C语言使用结构体实现简单通讯录

    C语言用结构体实现一个通讯录,通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名.性别.年龄.电话.住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 代码实现: 头文件: #ifndef __HEAD_H__ ////防止头文件被多次调用 #define __HEAD_H__ #include<stdio.h> #include<string.h> #in

  • 用C语言实现简易通讯录

    C语言实现一个通讯录,通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名.性别.年龄.电话.住址 **提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人** 思路分析: 首先我们可以分三个模块来解决这个问题,第一个模块我们需要一个头文件,这个头文件里可以包含一些相应信息,当实现文件和测试文件包含自己定义的头文件时便可以获得一些相关的信息.所以头文件里

随机推荐