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

加入VIP,免费下载
 

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

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

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构电话码查询系统设计报告及代码.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构电话码查询系统设计报告及代码.docx

1、数据结构电话码查询系统设计报告及代码郑州轻工业学院课 程 设 计 任 务 书题目 电话号码查询系统 专业、班级 计科10-01 学号 41 姓名王平 主要内容:设计哈希表实现电话号码查找系统基本要求:从键盘输入各记录,分别以电话号码和用户名为关键字设计哈希表;采用不同的哈希函数,比较冲突率;采用适当的方法解决冲突;在哈希函数确定的前提下,尝试不同类型处理冲突的方法,考察平均查找长度的变化;查找并显示给定电话号码的记录;查找并显示给定用户名的记录。主要参考资料等:数据结构课本(c语言版)完 成 期 限:21012年6月21号指导教师签名: 课程负责人签名: 12年 6 月 21 日郑州轻工业学院

2、本科数据结构课程设计总结报告设计题目:电话号码查询系统学生姓名:王平系 别:计算机科学与通信工程学院专 业:计算机科学与技术班 级:10-01 学 号:41指导教师:卢冰、李晔 2012年 6月 21 日设计题目题目:电话号码查询系统每个记录有下列数据项:电话号码、用户名、地址;从键盘输入各记录,分别以电话号码和用户名为关键字设计哈希表;采用不同的哈希函数,比较冲突率;采用适当的方法解决冲突;在哈希函数确定的前提下,尝试不同类型处理冲突的方法,考察平均查找长度的变化;查找并显示给定电话号码的记录;查找并显示给定用户名的记录。运行环境(软、硬件环境)Vc6.0算法设计的思想 电话号码查询系统主要

3、是考察我们对哈希查找的掌握。题目要求用电话号码和姓名两种方式查找;第一大部份是用电话号码查找,第二部分是用姓名查找。1:电话号码查找(先建立哈希表读入数据,然后再处理冲突,查找):在这部分中,我用了除留取余法和数字分析法设计的哈希表,用的是开放定址法进行的冲突处理。除留取余法思想:取关键字被某个不大于哈希表表长的数p除后所得余数为哈希地址即:H(key)=key%p。数字分析法:已知关键字是以r为基础的数,哈希表中出现的关键字是事先知道的,选择关键字是候,我们应该尽量避免冲突。开放地址法:开放地址法主要公式;H=(H+di)%m,di的取法有三种,但是我的程序中只用到了线性探测在散列,本可以用

4、再哈希函数解决冲突的,但是考虑到再哈希函数会增加计算时间,所以就没用。2:姓名查找(先建立哈希表读入数据,然后再处理冲突,查找)方式:这个过程中,我选取了数字分析法,解释如上。主菜单的设计在设计效果上已经显示,不过多说明。算法的流程 主菜单建立除留取余和数字分析法存储开放地址法解决冲突查找。算法设计分析这段代码是哈希存储时从第三个数开始求,提高了代码效率。int i = 3; while(s.numi!=0) /关键字 key+=(s.numi-0); /关键字求和 i+; key=key%21;线性探测再散列处理冲突 if(!strcmp(W.tkey.num,)/查找,解决冲突 W.tke

5、y=s; else /第一次没解决彻底,继续解决冲突 int j=1; while(strcmp(W.t(key+j)%21.num,) j+; W.t(key+j)%21=s; 查找代码;while(xnumi!=0) key+=(xnumi-0); /求和 i+; key=key%21; if(!strcmp(W.tkey.num,xnum)/第一次查找,如果值相等直接赋值 printf(%s %s %sn,W.tkey.name,W.tkey.address,W.tkey.num); else /第一次没找到,继续查找 int j=1; while(strcmp(W.t(key+j)%2

6、1.num,xnum) j+; if(j=20) printf(查找元素不存在!); else printf(%s %s %sn,W.t(key+j)%21.name,W.t(key+j)%21.address,W.t(key+j)%21.num);/输出查找到得元素 主界面: printf(*电话号码查询系统*n); printf( 用电话号码查询 1 n); printf( 用用户名查询 2 n); printf(*n); printf(请输入您要的选项:n); int x,y; while(scanf(%d,&x)!=-1) if(x=1) printf(*电话号码查询*n); prin

7、tf( 除留取余法 1 n); printf( 数字分析法 2 n); printf(*n); printf(请输入y值:n); scanf(%d,&y); while(y3) switch(y) case 1:chuliu();break;/调用除留取余函数 case 2:shuzi();break;/调用数字分析函数 default:printf(输入指令不存在!n); printf(*电话号码查询*n); printf( 除留取余法 1 n); printf( 数字分析法 2 n); printf(*n); printf(请输入您要的选项:n); scanf(%d,&y); else i

8、f(x=2) printf(*用户名查询 *n); printf( 分析法 3 n); printf(*n); fenxi();/调用分析函数 else printf(查找方式不存在!请重新输入n); 运行结果分析测试实例:wangping kaifeng 123456 wangdoudou luoyang 456789 zhaijiajai zhengzhou 147258 sunxueping zhoukou 258369收获及体会本次试验电话号码查询系统,看起来也不是想我想象中的那么难,他比较具有针对性,要求我们用哈希函数解决这倒比较实用的题目,但是这道题目用到的哈希函数仅仅是哈希中的九

9、牛一毛,虽然写了大程序,但是对哈希表的了解还是一无所知,数据结构这门课程我认为有点难,也许是我c语言基础不够强吧,好多代码都不是很理解,以至于不能够灵活运用,其实通过每次实验我们都可以发现,数据结构的知识好像就是草原的草,密密麻麻的等待我们去拔掉,这是一项浩大的工程等待我们去建设,与此同时,也要求我们要踏实的完成每一次作业,认真的去分析重要的代码,只有端正自己的态度,才能不断地学到新的知识,提高自己。程序设计代码:#include #include#include#define NULL 0 int *p; struct node /建节点 char name20,address50; cha

10、r num11; node * next; ; struct Node /建节点 char name20,address50; char num11; ; typedef node* Lnode; typedef Node Tnode; typedef struct lode Lnode next;lode;typedef struct/顺序表存储下的哈希表 int size; Tnode t10000;Qnode;typedef struct/链表存储下的哈希表 int size; lode L10000;Pnode;void chuliu()/除留取余法查询电话号码 Qnode W; me

11、mset(W.t,0,sizeof(W.t);/初始化 Tnode s; printf(输入录入数据个数:); int n; scanf(%d,&n); W.size=n; /录入元素 printf(请输入你要录入的元素:); while(n-) printf(姓名 地址 电话号码n); scanf(%s %s %s,s.name,s.address,s.num); int i = 3,key; while(s.numi!=0) /关键字 key+=(s.numi-0); /关键字求和 i+; key=key%21; /线性探测再散列处理冲突 if(!strcmp(W.tkey.num,)/查

12、找,解决冲突 W.tkey=s; else /第一次没解决彻底,继续解决冲突 int j=1; while(strcmp(W.t(key+j)%21.num,) j+; W.t(key+j)%21=s; printf(请输入您要查找的电话号码:); /查找 char xnum11; scanf(%s,xnum); int i = 3; int key=xnum2-0; while(xnumi!=0) key+=(xnumi-0); /求和 i+; key=key%21; if(!strcmp(W.tkey.num,xnum)/第一次查找,如果值相等直接赋值 printf(%s %s %sn,W

13、.tkey.name,W.tkey.address,W.tkey.num); else /第一次没找到,继续查找 int j=1; while(strcmp(W.t(key+j)%21.num,xnum) j+; if(j=20) printf(查找元素不存在!); else printf(%s %s %sn,W.t(key+j)%21.name,W.t(key+j)%21.address,W.t(key+j)%21.num);/输出查找到得元素 void shuzi()/按电话号码-数字分析法 Qnode q1; printf(请输入您要输入的数据个数:); int n,m1,m2; mem

14、set(q1.t,0,sizeof(q1.t);/初始化 Tnode s; scanf(%d,&n); q1.size=n; for(int i=0;i10000;i+) strcpy(q1.ti.num,);/置空 m1=m2=0; while(n-) printf(请输入您要录入的元素:); printf(姓名 地址 电话号码n); scanf(%s %s %s,s.name,s.address,s.num);/读入数据 _int64 key; key=(_int64)s.num)%10000; /处理冲突(方法同上) if(!strcmp(q1.tkey.num,) q1.tkey=s;

15、 else i=1; m1+; while(strcmp(q1.t(key+i)%10000.num,) i+; q1.t(key+i)%10000=s; printf(请输入您要查找的电话号码:); /查找 char xnum11; scanf(%s,xnum); int k= 3; _int64 key=(_int64)xnum; key=key%10000; if(!strcmp(q1.tkey.num,xnum) printf(%s %s %s,q1.tkey.name,q1.tkey.address,q1.tkey.num); else int j=1; while(strcmp(q

16、1.t(key+j)%10000.num,xnum) j+; if(j=20) printf(查找元素不存在!); else printf(%s %s %sn,q1.t(key+j)%10000.name,q1.t(key+j)%10000.address,q1.t(key+j)%10000.num); void fenxi() Qnode q2; printf(请输入您要输入的数据个数:); int n,m1,m2; memset(q2.t,0,sizeof(q2.t);/初始化 Tnode s; scanf(%d,&n); q2.size=n; for(int i=0;i10000;i+)

17、 strcpy(q2.ti.name,);/置空 m1=m2=0; while(n-) printf(请输入您要录入的元素:); printf(姓名 地址 电话号码n); scanf(%s %s %s,s.name,s.address,s.num); _int64 key; key=(_int64)s.name)%10000; /处理冲突 if(!strcmp(q2.tkey.name,) q2.tkey=s; else i=1; m1+; while(strcmp(q2.t(key+i)%10000.name,) i+; q2.t(key+i)%10000=s; printf(请输入您要查找

18、的名字:); /查找 char xname20; scanf(%s,xname); int k= 1; _int64 key=(_int64)xname; key=key%10000; if(!strcmp(q2.tkey.name,xname) printf(%s %s %s,q2.tkey.name,q2.tkey.address,q2.tkey.num); else int j=1; while(strcmp(q2.t(key+j)%10000.name,xname) j+; if(j=20) printf(查找元素不存在!); else printf(%s %s %sn,q2.t(ke

19、y+j)%10000.name,q2.t(key+j)%10000.address,q2.t(key+j)%10000.num); void menu() printf(*电话号码查询系统*n); printf( 用电话号码查询 1 n); printf( 用用户名查询 2 n); printf(*n); printf(请输入您要的选项:n); int x,y; while(scanf(%d,&x)!=-1) if(x=1) printf(*电话号码查询*n); printf( 除留取余法 1 n); printf( 数字分析法 2 n); printf(*n); printf(请输入y值:n

20、); scanf(%d,&y); while(y3) switch(y) case 1:chuliu();break;/调用除留取余函数 case 2:shuzi();break;/调用数字分析函数 default:printf(输入指令不存在!n); printf(*电话号码查询*n); printf( 除留取余法 1 n); printf( 数字分析法 2 n); printf(*n); printf(请输入您要的选项:n); scanf(%d,&y); else if(x=2) printf(*用户名查询 *n); printf( 分析法 3 n); printf(*n); fenxi();/调用分析函数 else printf(查找方式不存在!请重新输入n); int main()/函数 menu(); return 0;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1