设计任务

设计哈希表实现电话号码查找系统

  1. 设每个记录有下列数据项:电话号码、用户名、地址
  2. 从键盘输入个记录,分别以电话号码和用户名为关键字建立不同的哈希表
  3. 采用线性探测再散列的方法解决冲突
  4. 查找并显示给定电话号码的记录
  5. 查找并显示给定用户名的记录

主要算法功能

主要4个功能:

  • 创建链表
  • 查询(通过名字/电话)
  • 显示
  • 退出

以下是简易流程图:

代码

为了让主代码main.c看起来更加清晰,我把功能函数集成在一个头文件中hash.h。

代码里用不大好的英文注释,能懂9行

main.c文件


#include"hash.h"int main()
{char s[20];int n,Fn;int num;//contact numberBridge head;//include namehash table and phonehash tablewhile(1){Menu();printf("Enter:");scanf("%d",&n);switch(n){case 1:printf("Enter number of contacts:");scanf("%d",&num);Fn=Fprime(num);//get next primehead=Create(num);//creat linkClean();break;case 2:Query(head,Fn);Clean();break;case 3:ShowAll(head,Fn);//print all contactsClean();break;case 4:printf("\nThank you for using my software!\n");return 0;}}
}

hash.h文件


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define MAXNUMBER 100000
typedef struct node
{char name[8];char phone[12];char adress[50];int state;struct node *next;
}contnode;
typedef struct
{contnode *Hn;//head node of namecontnode *Hp;//head node of phone
}Bridge;
void Menu()
{printf("\n----------Menu----------\n\n");printf(" 1.Create contacts\n");printf(" 2.Query contacts\n");printf(" 3.Show all contacts\n");printf(" 4.Exit\n");printf("------------------------\n");}
void Clean()//clear window
{printf("\nClear window? (Y/N)\t");getchar();//filter \nif(getchar()=='Y')system("cls");
}
void ShowAll(Bridge h,int n)//show all contacts
{contnode *p=h.Hp;printf("\nName\tPhone\t\tAdress");printf("\n--------------------------------------\n");while(n--){if(p->state==1)printf("%s\t%s\t%s\n",p->name,p->phone,p->adress);              p=p->next;} }
int Fprime(int n)//find next prime
{int i,p=(n%2)?n+2:n+1;while(p<=MAXNUMBER){for(i=(int)sqrt(p);i>2;i--)if(!(p%i))break;if(i==2)break;else p+=2;} return p;
}
contnode* CreatTable(int num)//insert tail & init
{contnode *p,*q,*h;q=p=h=(contnode*)malloc(sizeof(contnode));h->state=0;while(num--){p=(contnode*)malloc(sizeof(contnode));strcpy(p->name,"\0");strcpy(p->adress,"\0");strcpy(p->phone,"\0");p->state=0;q->next=p;q=p;}p->next=NULL;free(p);free(q);return h;
}
int Ghashn(char *key,int num)//get hash name number
{unsigned int h=0;while(*key!='\0')h=(h<<5)+*key++;return h%num;
}
int Ghashp(char *key,int num)//get hash phone number
{int i;int sum=0;for(i=6;i<=10;i++)sum=sum*10+key[i]-'0';return sum%num;
}void HashTable(char *name,char *phone,char *adress,contnode *h,int flag,int size)//create table
{int seat;contnode *p=h;if(flag)seat=Ghashp(phone,size);elseseat=Ghashn(name,size);while(seat&&seat--)//Go to the designated locationp=p->next;while(p->state!=0)//Linear Probing(if state==1 ,find the next one){if(p->next==NULL){p=h;continue; } p=p->next;} strcpy(p->name,name);strcpy(p->adress,adress);strcpy(p->phone,phone);   p->state=1;
}
void show(contnode *n)//print the contact
{printf("\nName\tPhone\t\tAdress");printf("\n--------------------------------------\n");printf("%s\t%s\t%s\n",n->name,n->phone,n->adress);
}void FindSeat(contnode *h,int size,int flag)//find seat of number
{char key[15];int seat,bseat,f=1;contnode *p=h;printf("\nEnter key:");scanf("%s",key);if(flag)seat=Ghashp(key,size);//find table number of phoneelse seat=Ghashn(key,size);//find table number of namebseat=seat;while(seat>0&&--seat)p=p->next;if(flag)while(strcmp(p->phone,key)!=0){if(p->next==NULL)//If to the end back to the head{f=1;p=h;}if(f)bseat++;if(bseat>=size)//If steps are larger than size return{printf("\nSorry,not found!\n");return;}p=p->next;}elsewhile(strcmp(p->name,key)!=0){if(p->next==NULL){f=1;p=h;}if(f)bseat++;if(bseat>=size){printf("\nSorry,not found!\n");return;}p=p->next;}show(p);//print node
}
Bridge Create(int num)
{int i;contnode *Hp,*Hn;Bridge h;char name[8],adress[20],phone[12];Hp=CreatTable(Fprime(num));//get head nodeHn=CreatTable(Fprime(num));for(i=0;i<num;i++){printf("\n%dst contact:",i+1);printf("\nEnter name:");scanf("%s",name);printf("Enter phone:");scanf("%s",phone);printf("Enter adress:");scanf("%s",adress);HashTable(name,phone,adress,Hn,0,Fprime(num));//create hashtable by nameHashTable(name,phone,adress,Hp,1,Fprime(num));//create hashtable by phone}h.Hn=Hn;h.Hp=Hp;return h;
}
void Query(Bridge head,int size)
{int n;printf("\n-------Choose way-------\n");printf("1.By Name\n");printf("2.By Phone\n");   printf("------------------------\n");printf("Enter:");  scanf("%d",&n);switch(n){case 1:FindSeat(head.Hn,size,0);break;case 2:FindSeat(head.Hp,size,1);break;}
}

哈希表实现电话号码查找系统相关推荐

  1. 哈希表实现电话号码查询系统(c++)

    问题描述:设计哈希表实现电话号码查询系统,实现下列功能: (1) 假定每个记录有下列数据项:电话号码.用户名.地址. (2) 一是从数据文件old.txt(自己现行建好)中读入各项记录,二是由系统随机 ...

  2. 设计散列表实现通讯录查找系统_[源码和文档分享]利用哈希表实现电话号码查询系统...

    第一章 需求分析 1.1 问题描述 设计一个电话号码查询系统,为来访的客⼈提供各种信息查询服务. 1.2 基本要求 设计每个记录有下列数据项:电话号码.用户名.地址 从键盘输入个记录,分别以电话号码和 ...

  3. 【Java Swing/散列表】散列表实现电话号码查找系统——问题汇总分享

    说明:本文为我在做课设时遇到的问题汇总,解决方法多数来自网络,因深感到处搜索解决方法不易,所以做成汇总.因搜索时没有记录每个答案来源网站,如有侵权,请联系我.感谢无私分享的每一个人. 题目:设计散列表 ...

  4. C++利用双哈希表实现存储机制hash table的算法(附完整源码)

    C++利用双哈希表实现存储机制的算法 C++利用双哈希表实现存储机制的算法完整源码(定义,实现,main函数测试) C++利用双哈希表实现存储机制的算法完整源码(定义,实现,main函数测试) #in ...

  5. c语言哈希表电子辞典_C语言实现的哈希表实现程序

    下面我们一起来看一个C语言实现的哈希表实现程序了,这个程序没有过多的说明只是一个例子,大家有兴趣可以进入看看或测试一下. 为了巩固一下链表知识,自己实现的一个哈希表,在GCC 4.4.7下编译通过: ...

  6. 数据结构课设(散列表的设计与实现---电话号码查找系统)

    一.要求: [问题描述] 设计散列表实现电话号码查找系统. [基本要求] 1) 设每个记录有下列数据项:电话号码.用户名.地址:2) 从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表:3)  ...

  7. C语言项目 电话查询系统 哈希表实现(项目要求 + 运行界面 + 代码分析 + 完整代码)

    电话查询系统 1. 项目要求 2. 数据样例 3. 运行界面 4. 代码分析 5. 完整代码 6. 项目报告 关注博主不迷路,博主带你码代码! 1. 项目要求 设每个记录有以下数据项:用户名.电话.地 ...

  8. 哈希表实现通讯录的设计与实现

    [实验目的] 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的电话与地址.设计哈希表存储,设计并实现通讯录查找系统. [实验要求] (1)每个员工记录有下列数据项:电话号码.用户名.地址 ...

  9. 数据结构课程设计-利用散列表做一个电话号码查找系统

    [基本要求] (1)设每个记录有下列数据项:电话号码.用户名.地址: (2)从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表: (3)采用一定的方法解决冲突: (4)查找并显示给定电话号码的 ...

  10. 巧用哈希表实现随机操作

    题目描述 这是 LeetCode 上的 380. O(1) 时间插入.删除和获取随机元素 ,难度为 中等. Tag : 「数据结构」.「哈希表」 实现 RandomizedSet 类: Randomi ...

最新文章

  1. PHP获取当前时间差8小时的问题
  2. 面试必过之Mongdodb数据库面试题总结大全!
  3. 2020年PHP中级面试知识点及答案
  4. python runner是什么_HttpRunner-01-初识
  5. ANSYS——对称模型对称边界的确定以及对称边界的约束施加问题
  6. HTML判断如果并且,将html转换为js,并且其中含有判断语句
  7. 基于AWT、Swing的GUI程序 - 改变观感
  8. E-Prime 软件中常用的 inline 语句
  9. seaborn无法下载数据的问题
  10. 创建Maven时生成的properties标签内容解释
  11. PHP折算,PHP实现货币换算的方法
  12. winpe装双系统linux_在Winpe下安装Ubuntu
  13. nmos导通流向_MOS管知识详细说明!结构,原理,技术参数详解,一定要进来看下...
  14. 别再问我2020年Android前景如何了,我都回答腻了…
  15. 深度学习(十三) Adversarial Attack 理论部分
  16. 浅谈Flink对象重用(object reuse)
  17. 苹果Mac电脑 如何设置Outlook企业邮箱
  18. 青龙面板 Bot配置教程
  19. JavaScript编程技术基础
  20. 鸿蒙系统安全模式,华为鸿蒙OS上线!开源开放毫无保留,这一友商早已用上鸿蒙同款系统...

热门文章

  1. 常见的网络协议和端口号
  2. 数字IC手撕代码--投票表决器
  3. java编译系统找不到指定路径_为什么我在E盘安装了java,命令指示符输入后却提示系统找不到指定路径?...
  4. SQL Server 之 修改时不允许保存更改
  5. 自动阅读行业又出新招?离线阅读脚本套路满满
  6. OFFICE | WORD VBA 合集
  7. Rbf神经网络使用Tensorflow实现
  8. 使用汉化版srvinstw.exe安装/卸载Windows系统服务
  9. 【入门】QSS基础入门笔记
  10. google chrome 浏览器 必备插件