




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、哈希表(散列表)的设计与实现【问题描述】 设计哈希表实现电话号码查找系统。【基本要求】 (1) 设每个记录有下列数据项:电话号码、用户名、地址; (2) 从键盘输入各记录,分别以电话号码为关键字建立散列表; (3)采用拉链法解决冲突; (4)查找并显示给定电话号码的记录; (5) 查找并显示给定用户名的记录。【选做内容】 (1)系统功能的完善; (2)设计不同的散列函数,比较冲突率; (3)在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。地址嫌麻烦没加,使用的时候要先新建一个空白的data.txt文件。/ hash.cpp : 定义控制台应用程序的入口点。/#i
2、nclude stdafx.h#include#includeusing namespace std;#define p 100#define z 97#define max 100struct datachar name15;/存放姓名long num;/存放电话号码;typedef struct hashdatachar name15;long num;hashdata *next;*linklist;data hmax;hashdata nhashmax;hashdata nahashmax;unsigned int bkdrhash(char *str)/字符串哈希值生成函数 unsi
3、gned int seed = 31; / 31 131 1313 13131 131313 etc. unsigned int hash = 0; while (*str) hash = hash * seed + (*str+); return (hash & 0x7fffffff);unsigned int aphash(char *str)/字符串哈希值生成函数 unsigned int hash = 0; int i; for (i=0; *str; i+) if (i & 1) = 0) hash = (hash 3); else hash = (hash 5); return (
4、hash & 0x7fffffff);int datanum(int j)/统计hmax数组中有多少数据for(j=0;jp&hj.num!=null;j+)return j;void wdata()/新建电话簿数据文件for(int i=0;i1;i+)scanf(%s%d,&,&hi.num);file *fp;fp=fopen(data.txt,wb);fwrite(h,sizeof(struct data),1,fp);fclose(fp);void wpdata()/将hmax的数据写入到文件当中int j=datanum(j);file *fp;fp=fopen(da
5、ta.txt,wb);fwrite(h,sizeof(struct data),j,fp);fclose(fp);void adata()/在电话簿中添加数据并写入文件for(int i=0;i1;i+)scanf(%s%d,&,&hi.num);file *fp;fp=fopen(data.txt,ab);fwrite(h,sizeof(struct data),1,fp);fclose(fp);void rdata()/读取文件中的电话簿数据file *fp;fp=fopen(data.txt,rb);fread(h,sizeof(struct data),p,fp);int
6、 j=datanum(j);printf(n编号 姓 名 电 话nn);for(int i=0;ij;i+)printf(%4d ,i+1);printf(%10s %10dn,,hi.num);fclose(fp);void ldata()/载入文件到hmax数组当中file *fp;fp=fopen(data.txt,rb);fread(h,sizeof(struct data),p,fp);fclose(fp);void ddata(int n)/删除电话簿中数据if(n=0)return;ldata();int j=datanum(j),i;for(i=n;ij;i+)s
7、trcpy(,);hi-1.num=hi.num;hj-1.num=null;wpdata();void numhash(struct data smax)/按电话号码生成哈希表int k=0;int j=datanum(j);for(int i=0;iname,);p-num=si.num;p-next=nhashk.next;nhashk.next=p;void fnumhash(long n)/按电话号码在哈希表中查找数据int k=0;k=n%z;linklist p;p=&nhashk;if(p-num=n) printf(n姓 名 电
8、话n);printf(%6s %10dnn,p-name,p-num);elsewhile(p!=null)if(p-num=n)printf(n姓 名 电 话n);printf(%6s %10dnn,p-name,p-num);break;elseif(p-next=null)printf(n该号码不存在!nn);p=p-next;void namehash(data smax)/按姓名生成哈希表int k=0;int j=datanum(j);for(int i=0;iname,);p-num=si.num;p-next=nahashk.next;nahashk.next=p
9、;void fnamehash(char str3)/按姓名在哈希表中查找数据int k=0;k=bkdrhash(str);k=k%z;linklist p;p=&nahashk;if(aphash(str)=aphash() printf(n姓 名 电 话n);printf(%6s %10dnn,p-name,p-num);elsewhile(p!=null)if(aphash(str)=aphash(p-name)printf(n姓 名 电 话n);printf(%6s %10dnn,p-name,p-num);break;elseif(p-next=null)p
10、rintf(n该姓名不存在!nn);p=p-next;void rnumhash()/输出按电话号码生成的哈希表printf(n编号 姓 名 电 话nn);for(int i=0;inext;while(p!=null)printf( -%10s %10d,p-name,p-num);p=p-next;printf(n);elseprintf(%4d,i);printf(%10s %10dn,,nhashi.num);elseprintf(%4d,i);printf(n);void rnamehash()/生成按姓名生成的哈希表printf(n编号 姓 名 电 话nn);
11、for(int i=0;inext;while(p!=null)printf( -%10s %10d,p-name,p-num);p=p-next;printf(n);elseprintf(%4d,i);printf(%10s %10dn,,nahashi.num);elseprintf(%4d,i);printf(n);int _tmain(int argc, _tchar* argv)int m;ldata();numhash(h);namehash(h);cout*电话号码查询系统*endlendl;printf(tttt1.电 话 簿ntttt2.按电话查找nt
12、ttt3.按姓名查找ntttt4.显示哈希表ntttt0.退 出nn);cout*endl;while(scanf(%d,&m)&m!=0)switch(m)case 1:int n;printf(n1.新 建n2.添 加n3.显 示n4.删 除n0.退 出n);while(scanf(%d,&n)&n!=0)switch(n)case 1: printf(n姓 名 电 话n);wdata();break;case 2: printf(n姓 名 电 话n);adata();break;case 3:rdata();break;case 4:int n;rdata();printf(n请输入编号
13、(0.退出删除):);scanf(%d,&n);ddata(n);break;printf(n1.新 建n2.添 加n3.显 示n4.删 除n0.退 出n);break;case 2:int num;/rnumhash();/ldata();/numhash(h);printf(请输入一个电话号码:);scanf(%d,&num);fnumhash(num);break;case 3:char name3;/rnamehash();/ldata();/namehash(h);printf(请输入一个姓名:);scanf(%s,name);fnamehash(name);break;case 4:int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电工实操常识题库及答案
- 2025-2030中国营销管理咨询业务创新与市场增长潜力预测报告
- 2025-2030中国自动驾驶技术商业化路径与产业链布局分析报告
- 2025-2030中国脑机接口技术突破与医疗康复领域应用前景
- 2025-2030中国罕见病药物研发进展与医疗保障政策报告
- 2025-2030中国糖尿病治疗药物行业发展趋势及投资价值评估报告
- 2025-2030中国管理咨询行业竞争格局演变及未来增长潜力评估报告
- 2025-2030中国移动支付市场渗透率提升与商业模式创新报告
- 2025-2030中国磁悬浮列车商业运营可行性研究与线路规划建议
- 本单元复习与测试教学设计-2025-2026学年小学科学三年级下册青岛版(五四制2024)
- 2024年大学试题(政治学)-比较政治制度考试近5年真题集锦(频考类试题)带答案
- 输变电工程施工质量验收统一表式附件1:线路工程填写示例
- 水利安全生产风险防控“六项机制”右江模式经验分享
- 2024年四川成都市青白江区弥牟镇执法辅助人员招聘笔试参考题库附带答案详解
- 高等学校英语应用能力考试(B级)强化训练全套教学课件
- 道路保洁安全培训课件
- 第12课+自觉抵制犯罪(课时2)【中职专用】中职思想政治《职业道德与法治》高效课堂(高教版2023·基础模块)
- 安全费用提取、使用台账
- 《铁路职业素质》课件 4铁路职业意识与心理
- 人教版数学六年级上册第一单元测评卷(含图片答案)
- 给排水设备监控系统
评论
0/150
提交评论