ImageVerifierCode 换一换
格式:DOC , 页数:37 ,大小:933.50KB ,
资源ID:4609166      下载积分:12 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4609166.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(课程设计-散列表实现电话号码查找系统.doc)为本站上传会员【人****来】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

课程设计-散列表实现电话号码查找系统.doc

1、 华 北 科 技 学 院 课程设计说明书 学号: 班级: 网络B15-1 姓名: 设计题目: 散列表的设计与实现 设计地点:___________________________ 设计时间: 2017-2-27 至 2017-3-10 成绩评定: 1、工作量: A( ),B( ),C( ),D( ),F( ) 2、难易度: A( ),B( ),C( ),D( ),F( ) 3、答辩情况: A(

2、 ),B( ),C( ),D( ),F( ) 4、报告规范度:A( ),B( ),C( ),D( ),F( ) 5、学习态度: A( ),B( ),C( ),D( ),F( ) 总评成绩:___________________________ 指导教师: 一、问题描述与需求分析 1、问题描述 设计散列表实现电话号码查找系统。 2、功能需求分析 1) 每个记录有下列数据项:电话号码、用户名、地址; 2) 从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表; 3) 采用一定的方法解决冲突; 4) 查找并显示

3、给定电话号码的记录; 5) 查找并显示给定用户名的记录。 6) 在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。 二、概要设计 1、总体设计思路 程序的总体实现思路、方法: 本程序使用了链地址法和开放定址法处理冲突,可以实现从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;查找并显示给定电话号码的记录;查找并显示给定用户名的记录;计算使用不同方法处理冲突时的平均查找长度。 当使用链地址法处理冲突,电话号码为关键字建立散列表时,使用除留余数法(t=e->number%n),确定哈希地址。 当使用链地址法处理冲突,用户名为关键字建立散列表时

4、把储存用户名的字符数组(name)的0号位置的字符(name[0])强制转换为int类型(i),即i=(int)name[0],再使用除留余数法确定哈希地址(i=i%n,n=13)。 当使用开放定址法处理冲突,电话号码为关键字建立散列表时,增量序列取用线性探测再散列法。 当使用开放定址法处理冲突,用户名为关键字建立散列表时,把储存用户名的字符数组(name2)的0号位置的字符(name2[0])强制转换为int类型(e),即e=(int)name[0],使用开放定址法取得哈希地址,如果产生冲突增量取用线性探测再散列法。 用 户 名 为关 键字 号码为关键字 添加

5、查询 用 户 名 为关 键字 号码为关键字 用 户 名 为关 键字 号码为关键字 添加 查询 用 户 名 为关 键字 号码为关键字 链地址法 开放定址法 电话号码查找系统 初始化散列表 记算ASL 程序总的功能结构图。 2、 模块简介 链地址法: void hashlistinit(newnode **p)//初始化散列表 void hashinputname(newnode **p)//添加记录(以用户名为关键字) void hashsho

6、w2name(newnode **p)//查询记录(以用户名为关键字) void hashinput(newnode **p)//添加记录(以号码为关键字) void hashshow(newnode **p)//查询记录(以号码为关键字) void ASL(newnode **p)//计算ASL 开放定址法 void hashlistinit2(anode3 w)//初始化散列表 void hashinput2(anode3 w)//添加记录(以号码为关键字) void hashshow2(anode3 w)//查询记录(以号码为关键字) void hashinputname

7、2(anode3 w{//添加记录(以用户名为关键字) void hashshow2name2(anode3 w)//查询记录(以用户名为关键字) void ASL2(anode3 w)//计算ASL int scan()//菜单显示函数 int scan2(){//菜单显示函数 三、详细设计 1、数据结构设计 链地址法: 电话号码 地址 名字 指向下一个结点 typedef struct node{ 0 int number;

8、 char address[size]; char name[size]; struct node *next; }newnode,*anode; 13 开放定址法: 电话号码 地址 名字 记录使用开放定址法时的冲突次数 typedef struct node2{

9、 int number2; char address2[size]; char name2[size]; int v;//冲突次数 }newnode2,*anode2; 指向(newnod型数组)储存录入信息的数组 判断存储空间是否已满 记录表长 typedef struct node3{ anode2 q;//信息录入数组 int i;//判断存储空间 int j;//表长 }newnode3,*anode3; 2、 算法分析与实现 开放定址法 添加记录(以用户名为关键字) 使用开放定址法,以用户名为关键字,添加记录当

10、输入的电话号码不为-1时,输入姓名(英文),把姓名的第一个英文字母(char型)强制转换为整型e, 再使用开放定址法获取哈希地址,增量取用线性探测再散列法。 e=( (int)a[0] +k)%表长 该位置是否为空? 在该位置插入数据 输入地址 K=k+1 输入地址 在该位置插入数据 输出内存已满 结束 e=(int)a[0]%表长 该位置是否为空? 哈希表是否已满? K=1 输入姓名(char a[100]) d= -1? 开始 输入电话号码d Y

11、 N N Y Y Y N N Y N

12、 Y Y 四、运行结果和调试分析 测试数据: 姓名 住址 电话号码 Fu 云南 19 Yuan 河北 14 Dong 山西 23 链地址法: 用户名为关键字建立散列表:ASL=1 以号码为关键字建立散列表:ASL=1 开放定址法: 用户名为关键字建立散列表:ASL=1 以号码为关键字建立散列表:ASL=1 运行结果图。 1.选用建表方法,初始化散

13、列表。——————————链地址法 2. 添加记录(以用户名为关键字)——————————链地址法 3. 查询记录(以用户名为关键字)——————————链地址法 4. 计算ASL——————————链地址法 5. 添加记录(以号码为关键字)——————————链地址法 6. 查询记录(以号码为关键字)——————————链地址法 7.切换开放定址法 8. 初始化

14、散列表,添加记录(以用户名为关键字)—————开放定址法 9. 查询记录(以用户名为关键字)——————————开放定址法 10. 计算ASL——————————开放定址法 11. 添加记录(以号码为关键字)——————————开放定址法 12. 查询记录(以号码为关键字)——————————开放定址法 13.退出系统 五、总结体会 课程设计使我对数据结构课程的理解更深入,也能够发现自己平时不太注意的语法错误。当遇到问题时就翻书,

15、或者上网查资料。在程序调试的过程中也能够完善系统。在课程设计过程中,使我的思路更为开拓。 参考文献 [1]严蔚敏,吴伟民编著.《数据结构》(C语言版).清华大学出版社。 [2]孙改平,王德志编著,《C语言程序设计》,清华大学出版社。 程序源码: #include #include #include #include #define size 100 #define n 13 typedef struct node{ int numbe

16、r; char address[size]; char name[size]; struct node *next; }newnode,*anode; typedef struct node2{ int number2; char address2[size]; char name2[size]; int v;//冲突次数 }newnode2,*anode2; typedef struct node3{ anode2 q;//信息录入数组 int i;//判断存储空间 int j;//表长 }newnode3,*anode3; void hashlistinit

17、newnode **p){//初始化散列表链地址法 int i; for(i=0;inumber

18、v; printf("请输入地址\n"); scanf("%s",e->address); printf("请输入名字(英文)\n"); scanf("%s",e->name); i=(int)e->name[0]; i=i%n; e->next=p[i]; p[i]=e; printf("请输入电话号码,输入-1结束\n"); scanf("%d",&v); } } void hashshow2name(newnode **p){//查询记录(以用户名为关键字)链地址法 char a[size]; anode t; int i; pri

19、ntf("请输入要查询用户名\n"); scanf("%s",a); i=(int)a[0]; i=i%n; t=p[i]; while(t&&strcmp(t->name,a)!=0){ t=t->next; } if(t==NULL){ printf("您所查询的用户不存在\n"); } else{ printf("------------------------------------------\n"); printf("姓名:%s\n",t->name); printf("电话:%

20、d\n",t->number); printf("地址:%s\n",t->address); printf("------------------------------------------\n"); } } void hashinput(newnode **p){//添加记录(以号码为关键字)链地址法 int t,v; printf("请输入数据\n"); printf("请输入电话号码,输入-1结束\n"); scanf("%d",&v); while(v!=-1){ anode e=(anode)malloc(sizeof(

21、newnode)); e->number=v; printf("请输入地址\n"); scanf("%s",e->address); printf("请输入名字(英文)\n"); scanf("%s",e->name); t=e->number%n; e->next=p[t]; p[t]=e; printf("请输入电话号码,输入-1结束\n"); scanf("%d",&v); } } void hashshow(newnode **p){//查询记录(以号码为关键字)链地址法 int d,h; ano

22、de t; printf("请输入所要查询的电话号码\n"); scanf("%d",&d); h=d%n; t=p[h]; while(t&&t->number!=d){ t=t->next; } if(t==NULL){ printf("您所要查询的号码不存在\n"); } else{ printf("------------------------------------------\n"); printf("姓名:%s\n",t->name); printf("电话:%d\n",t->numbe

23、r); printf("地址:%s\n",t->address); printf("------------------------------------------\n"); } } void ASL(newnode **p){//计算ASL链地址法 int a[size],l,asl,z,b; asl=0; z=0; anode u; for(l=0;l

24、 b++; u=u->next; } } for(l=1;lq=e; w->i=n; w->j=n; for(int h=

25、0;hj;h++){ w->q[h].number2=0; w->q[h].v=0; strcpy(w->q[h].address2,"无"); strcpy(w->q[h].name2,"无"); } } void hashinput2(anode3 w){//添加记录(以号码为关键字)开放定址法 int d,t,k; k=1; printf("亲请输入所要录入的信息\n"); printf("电话号码(输入-1结束):"); scanf("%d",&d); t=d%w->j; while(d!=-1){ if(w->q[

26、t].number2==0&&w->i!=0){ w->q[t].number2=d; printf("姓名:"); scanf("%s",w->q[t].name2); printf("地址:"); scanf("%s",w->q[t].address2); w->i=w->i-1; w->q[t].v=1; } else if(w->i==0){ printf("内存已满\n"); } else if(w->q[t].number2!=0){ t=(d+k)%w->j; k=k+1; w->q[t].v=2;

27、 while(w->q[t].number2!=0&&kj){ t=(d+k)%w->j; k=k+1; w->q[t].v++; } w->q[t].number2=d; printf("姓名:"); scanf("%s",w->q[t].name2); printf("地址:"); scanf("%s",w->q[t].address2); w->i=w->i-1; } printf("电话号码(输入-1结束):"); scanf("%d",&d); t=d%w->j; } } void

28、 hashshow2(anode3 w){//查询记录(以号码为关键字)开放定址法 int d,k,t; k=1; printf("请输入要查询的电话号码:"); scanf("%d",&d); t=d%w->j; if(w->q[t].number2==d){ printf("------------------------------------------\n"); printf("姓名:%s\n",w->q[t].name2); printf("电话:%d\n",w->q[t].number2); pr

29、intf("地址:%s\n",w->q[t].address2); printf("------------------------------------------\n"); } else{ t=(d+k)%w->j; k=k+1; while(w->q[t].number2!=d&&kj){ t=(d+k)%w->j; k=k+1; } if(w->q[t].number2==d){ printf("---------------------

30、\n"); printf("姓名:%s\n",w->q[t].name2); printf("电话:%d\n",w->q[t].number2); printf("地址:%s\n",w->q[t].address2); printf("------------------------------------------\n"); } else{ printf("您所要查询的号码不存在\n"); } } } void has

31、hinputname2(anode3 w){//添加记录(以用户名为关键字)开放定址法 char a[size]; int e,k,d; k=1; printf("请输入要录入的信息\n"); printf("电话号码(输入-1结束):"); scanf("%d",&d); while(d!=-1){ printf("姓名(英文):"); scanf("%s",a); e=(int)a[0]; e=e%w->j; if(strcmp(w->q[e].name2,"无")==0&&w->i!=0){ strcpy(w->q[e].n

32、ame2,a); w->q[e].number2=d; printf("地址:"); scanf("%s",w->q[e].address2); w->i=w->i-1; w->q[e].v=1; } else if(w->i==0){ printf("内存已满\n"); } else if(strcmp(w->q[e].name2,"无")!=0){ e=(e+k)%w->j; k=k+1; w->q[e].v=2; while(strcmp(w->q[e].name2,"无")!=0

33、kj){ e=(e+k)%w->j; k=k+1; w->q[e].v++; } strcpy(w->q[e].name2,a); w->q[e].number2=d; printf("地址:"); scanf("%s",w->q[e].address2); w->i=w->i-1; } printf("电话号码(输入-1结束):"); scanf("%d",&d); } } void hashshow2name2(anode3 w){//查询记录(以用户名

34、为关键字)开放定址法 char a[size]; int e,k; k=1; printf("请输入要查询的用户名(英文):"); scanf("%s",a); e=(int)a[0]; e=e%w->j; if(strcmp(w->q[e].name2,a)==0){ printf("------------------------------------------\n"); printf("姓名:%s\n",w->q[e].name2); printf("电话:%d\n",w->q[e].number2);

35、 printf("地址:%s\n",w->q[e].address2); printf("------------------------------------------\n"); } else{ e=(e+k)%w->j; k=k+1; while(strcmp(w->q[e].name2,a)!=0&&kj){ e=(e+k)%w->j; k=k+1; } if(k>=w->j){ printf("您所查询的用户不存在\n"); }

36、 else{ printf("------------------------------------------\n"); printf("姓名:%s\n",w->q[e].name2); printf("电话:%d\n",w->q[e].number2); printf("地址:%s\n",w->q[e].address2); printf("------------------------------------------\n"); } } } void ASL2(anode3

37、 w){//计算ASL开放定址法 int asl,c,z; asl=0; z=0; for(c=0;cj;c++){ asl=asl+w->q[c].v; } for(c=0;cj;c++){ if(w->q[c].number2!=0){ z++; } } asl=asl/z; printf("用开放定址法处理冲突:ASL=%d\n",asl); } int scan(){ int m; printf("**************************************\n"); p

38、rintf(" 菜单 1 \n"); printf("**************************************\n"); printf("亲,您要用选用哪个方法?\n"); printf("1.链地址法\n"); printf("2.开放定址法\n"); printf("--------------------------------------\n"); printf("亲,请您输入要选用的方法:"); scanf("%d",&m); return m; } int scan2(){ int

39、 j1; printf("**************************************\n"); printf(" 菜单 2 \n"); printf("**************************************\n"); printf("亲啊,我有如下功能哦~\n"); printf("1.初始化散列表\n"); printf("2.添加记录(以用户名为关键字)\n"); printf("3.查询记录(以用户名为关键字)\n"); printf("4.添加记录(以号码为关键字)\n"

40、); printf("5.查询记录(以号码为关键字)\n"); printf("6.计算ASL\n"); printf("7.选用另一个方法\n"); printf("8.退出系统\n"); printf("--------------------------------------\n"); printf("亲啊,您要使用那个功能呢:"); scanf("%d",&j1); printf("--------------------------------------\n"); return j1; } int main(){ int t,v,x; newnode *

41、p[n]; anode3 w; newnode3 y1; w=&y1; v=1; t=scan(); while(v){ if(t==1){ x=scan2(); switch(x){ case 1:hashlistinit(p); break; case 2:hashinputname(p); break; case 3:hashshow2name(p); break; case 4:h

42、ashinput(p); break; case 5:hashshow(p); break; case 6:ASL(p); break; case 7:t=2; printf("已为您切换开放定址法\n"); break; case 8:v=0; break; default:printf("输入错误!\n");

43、 break; } } else if(t==2){ x=scan2(); switch(x){ case 1:hashlistinit2(w); break; case 2:hashinputname2(w); break; case 3:hashshow2name2(w); break; case 4:hashinput2(w); br

44、eak; case 5:hashshow2(w); break; case 6:ASL2(w); break; case 7:t=1; printf("已为您切换链地址法\n"); break; case 8:v=0; break; default:printf("输入错误\n"); break; } }

45、 else if(t!=1&&t!=2){ printf("输入错误!\n"); t=scan(); } } } 1. 基于C8051F单片机直流电动机反馈控制系统的设计与研究 2. 基于单片机的嵌入式Web服务器的研究 3. MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究 4. 基于模糊控制的电阻钎焊单片机温度控制系统的研制 5. 基于MCS-51系列单片机的通用控制模块的研究 6. 基于单片机实现的供暖系统最佳启停自校正(STR)调节器 7. 单片机控制的

46、二级倒立摆系统的研究 8. 基于增强型51系列单片机的TCP/IP协议栈的实现 9. 基于单片机的蓄电池自动监测系统 10. 基于32位嵌入式单片机系统的图像采集与处理技术的研究 11. 基于单片机的作物营养诊断专家系统的研究 12. 基于单片机的交流伺服电机运动控制系统研究与开发 13. 基于单片机的泵管内壁硬度测试仪的研制 14. 基于单片机的自动找平控制系统研究 15. 基于C8051F040单片机的嵌入式系统开发 16. 基于单片机的液压动力系统状态监测仪开发 17. 模糊Smith智能控制方法的研究及其单片机实现 18. 一种基于单片机的轴快流

47、CO〈,2〉激光器的手持控制面板的研制 19. 基于双单片机冲床数控系统的研究 20. 基于CYGNAL单片机的在线间歇式浊度仪的研制 21. 基于单片机的喷油泵试验台控制器的研制 22. 基于单片机的软起动器的研究和设计 23. 基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究 24. 基于单片机的机电产品控制系统开发 25. 基于PIC单片机的智能手机充电器 26. 基于单片机的实时内核设计及其应用研究 27. 基于单片机的远程抄表系统的设计与研究 28. 基于单片机的烟气二氧化硫浓度检测仪的研制 29. 基于微型光谱仪的单片机系统

48、 30. 单片机系统软件构件开发的技术研究 31. 基于单片机的液体点滴速度自动检测仪的研制 32. 基于单片机系统的多功能温度测量仪的研制 33. 基于PIC单片机的电能采集终端的设计和应用 34. 基于单片机的光纤光栅解调仪的研制 35. 气压式线性摩擦焊机单片机控制系统的研制 36. 基于单片机的数字磁通门传感器 37. 基于单片机的旋转变压器-数字转换器的研究 38. 基于单片机的光纤Bragg光栅解调系统的研究 39. 单片机控制的便携式多功能乳腺治疗仪的研制 40. 基于C8051F020单片机的多生理信号检测仪 41. 基于单片机的电机

49、运动控制系统设计 42. Pico专用单片机核的可测性设计研究 43. 基于MCS-51单片机的热量计 44. 基于双单片机的智能遥测微型气象站 45. MCS-51单片机构建机器人的实践研究 46. 基于单片机的轮轨力检测 47. 基于单片机的GPS定位仪的研究与实现 48. 基于单片机的电液伺服控制系统 49. 用于单片机系统的MMC卡文件系统研制 50. 基于单片机的时控和计数系统性能优化的研究 51. 基于单片机和CPLD的粗光栅位移测量系统研究 52. 单片机控制的后备式方波UPS 53. 提升高职学生单片机应用能力的探究 54.

50、基于单片机控制的自动低频减载装置研究 55. 基于单片机控制的水下焊接电源的研究 56. 基于单片机的多通道数据采集系统 57. 基于uPSD3234单片机的氚表面污染测量仪的研制 58. 基于单片机的红外测油仪的研究 59. 96系列单片机仿真器研究与设计 60. 基于单片机的单晶金刚石刀具刃磨设备的数控改造 61. 基于单片机的温度智能控制系统的设计与实现 62. 基于MSP430单片机的电梯门机控制器的研制 63. 基于单片机的气体测漏仪的研究 64. 基于三菱M16C/6N系列单片机的CAN/USB协议转换器 65. 基于单片机和DSP的变压

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服