




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
散列表的设计与实现一、 作业要求:【问题描述】设计散列表实现电话号码查找系统。 【基本要求】 1) 设每个记录有下列数据项:电话号码、用户名、地址; 2) 从键盘输入各记录,分别以电话号码和用户名为关键字建立散列 表; 3) 采用一定的方法解决冲突; 4) 查找并显示给定电话号码的记录; 5) 查找并显示给定用户名的记录。 【进一步完成内容】 1) 系统功能的完善; 2) 设计不同的散列函数,比较冲突率; 3) 在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。二、 设计分析:用散列表实现电话号码查找系统,采用姓名和电话号码为关键字,动态分配存储空间,根据姓名和电话号码分别进行哈希排序建立不同的数组分别存放姓名和电话号码,能实现电话号码信息的插入、删除、查找、保存等操作,采取线性探测法解决冲突。三、 逻辑结构:电话号码查找系统,逻辑上应当是每个结点含有一个人所有的信息,在查找的时候可以通过不同的查找方式对不同的信息进行查找,人和人之间的关系应当是独立的,添加结点的时候对每个人由系统分配新的结点,但是不同人结点中所包含的信息则具有相同的格式,比如每个结点中的姓名、地址、电话号码都具有相同的格式,在进行物理存储的时候可以建立相同的数组来放置同类信息。四、 存储结构:所设计的程序采用数组存放各类相同的信息,先建立数组进行初始化,再把不同的结点通过哈希排序以及线性探测的结果存放入对应的数组,建立的数组有两个,分别以姓名和电话号码建立哈希表,对信息进行存储,以后的各种操作,比如查找,散列等都建立在相应的哈希表的基础上,各个信息之间通过链表相连,在查找的时候可以充分利用哈希表查找的快速性,形象化的存储结构如下图:五、 算法设计:六、 实现代码:#include#include#include#include#include#define NULL 0unsigned int key;unsigned int key1;unsigned int key2; int *p;struct node /建节点 char name8,address20; char num11; node *next;typedef node *pnode;typedef node *mingzi; node *phone; node *nam; node *a;using namespace std; /使用名称空间hash(char num11) /建表,以人的电话号码为关键字,建立相应的散列表若哈希地址发生冲突,进行冲突处理 。 int i = 3,j; key1=(int)num2; while(numi!=NULL) key1+=(int)numi; i+; key1=key1%20; for(j=0;jnum=) break; return(key);hash2(char name8) /建表,以人的姓名为关键字,建立相应的散列表 /若哈希地址发生冲突,进行冲突处理 int i = 1,j; key2=(int)name0; while(namei!=NULL) key2+=(int)namei; i+; key2=key2%20; for(j=0;jname=) break; return(key);node *input() /输入节点 node *temp; temp = new node; temp-next=NULL; cout输入姓名:temp-name; cout输入地址:temp-address; cout输入电话:temp-num; return temp;int apend() /添加节点 node *newphone; node *newname; newphone=input(); newname=newphone; /newphone-next=NULL; /newname-next=NULL; newphone-next = phonehash(newphone-num)-next; phonehash(newphone-num)-next=newphone; newname-next = namhash2(newname-name)-next; namhash2(newname-name)-next=newname; return 0;void create() /新建电话号码数组 int i; phone=new pnode20; for(i=0;inext=NULL; void create2() /新建姓名数组 int i; nam=new mingzi20; for(i=0;inext=NULL; void list() /显示列表(号码散列) int i; node *p; for(i=0;inext; while(p) coutname_address_numnext; void list2() /显示列表(姓名散列) int i; node *p; for(i=0;inext; while(p) coutname_address_numnext; void find(char num11) /查找用户信息(号码查找) int i,j=0; node *p; for(i=0;inext; while(p) if(strcmp(num,p-num)=0) coutname_address_numnext; if(j=0) cout无此记录endl;void find2(char name8) /查找用户信息(姓名查找) int i,j=0; node *p; for(i=0;inext; while(p) if(strcmp(name,p-name)=0) coutname_address_numnext; if(j=0) cout无此记录next; phonekey-next=p-next;void Delete1(char name8) node *p; hash2(name); p=namkey-next; namkey-next=p-next;void save() /保存用户信息 int i; node *p;fstream iiout(out.txt, ios:out); for(i=0;inext; while(p) iioutname_address_numnext; void menu() /菜单 cout0.添加记录endl; cout1.查找记录endl; cout2.姓名散列endl; cout3.号码散列endl; cout4.清空记录endl; cout5.保存记录endl; cout6.删除信息endl; cout7.退出系统endl; int main() cout 欢迎使用电话号码查找系统 endl; cout* 散列表的设计与实现*sel;/输入选择项目操作 if(sel=0) cout请输入要添加的内容:endl; apend(); else if(sel=1) cout9号码查询,8姓名查询b; if(b=9) cout请输入电话号码:num; cout输出查找的信息:endl; find(num); else if(b=8) cout请输入姓名:name; cout输出查找的信息:endl; find2(name); else printf(不合法操作!n); else if(sel=2) cout姓名散列结果:endl; list2(); else if(sel=3) cout号码散列结果:endl; list(); else if(sel=4) cout列表已清空:endl; create(); create2(); else if(sel=5) cout通信录已保存:endl; save(); else if(sel=6) int c; cout删除信息:endl; cout9.按号码删除 8.按姓名删除c;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 手术病人护理诊断
- 高教版(外研)高考英语一轮复习Unit 6 Its like a Home Away from Home课件
- 视觉障碍的护理
- 用电知识安全培训课件
- 癌症护理培训课件题目
- 2025年联邦学习非独立同分布数据(含答案与解析)
- 2025年低资源机器翻译增强习题(含答案与解析)
- 离退休工作专业知识培训课件
- 餐饮服务与管理概述讲课文档
- 新质生产力水行业发展趋势
- 核电站主要材料质量保证措施
- (2025年标准)挖桩孔协议书
- 浪浪山携志奔赴新学期-2025年秋季开学第一课主题教育班会-2025-2026学年初中主题班会
- 2025版集团内部无息借款资金调度与管理合同范本
- 管道吊装方案范本
- 黑龙江省五大连池市2025年上半年事业单位公开招聘试题含答案分析
- 小学英语课堂教学规范操作手册
- 人事经理工作汇报
- 项目实施进程汇报
- 2025学宪法讲宪法知识竞赛题库及答案(小学组)
- 中小企业网络安全解决方案概述
评论
0/150
提交评论