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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

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

1、系 别:计算机科学与通信工程学院专 业:计算机科学与技术班 级:10-01 学 号:*41指导教师:卢冰、李晔 2012年 6月 21 日设计题目题目:每个记录有下列数据项:电话号码、用户名、地址;运行环境(软、硬件环境)Vc6.0算法设计的思想 电话号码查询系统主要是考察我们对哈希查找的掌握。题目要求用电话号码和姓名两种方式查找;第一大部份是用电话号码查找,第二部分是用姓名查找。1:电话号码查找(先建立哈希表读入数据,然后再处理冲突,查找):在这部分中,我用了除留取余法和数字分析法设计的哈希表,用的是开放定址法进行的冲突处理。除留取余法思想:取关键字被某个不大于哈希表表长的数p除后所得余数为

2、哈希地址即:H(key)=key%p。数字分析法:已知关键字是以r为基础的数,哈希表中出现的关键字是事先知道的,选择关键字是候,我们应该尽量避免冲突。开放地址法:开放地址法主要公式;H=(H+di)%m,di的取法有三种,但是我的程序中只用到了线性探测在散列,本可以用再哈希函数解决冲突的,但是考虑到再哈希函数会增加计算时间,所以就没用。2:姓名查找(先建立哈希表读入数据,然后再处理冲突,查找)方式:这个过程中,我选取了数字分析法,解释如上。主菜单的设计在设计效果上已经显示,不过多说明。算法的流程主菜单建立除留取余和数字分析法存储开放地址法解决冲突查找。算法设计分析这段代码是哈希存储时从第三个数

3、开始求,提高了代码效率。int i = 3; while(s.numi!=0) /关键字 key+=(s.numi-0); /关键字求和 i+; key=key%21;线性探测再散列处理冲突 if(!strcmp(W.tkey.num,)/查找,解决冲突 W.tkey=s; else /第一次没解决彻底,继续解决冲突 int j=1; while(strcmp(W.t(key+j)%21.num,) j+; W.t(key+j)%21=s; 查找代码;while(xnumi!) key+=(xnumi- /求和 i+; key=key%21; if(!strcmp(W.tkey.num,xnu

4、m)/第一次查找,如果值相等直接赋值 printf(%s %s %sn,W.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(查找元素不存在!,W.t(key+j)%21.name,W.t(key+j)%21.address,W.t(key+j)%21.num);/输出查找到得元素 主界面: printf(*电话号码查询系统*n 用电话号码查询 1 n 用用户名查询 2 n*n请输入您要的选项:n in

5、t x,y; while(scanf(%d,&x)!=-1) if(x=1)*电话号码查询*n 除留取余法 1 n 数字分析法 2 n*n请输入y值: scanf(y); while(y3) switch(y) case 1:chuliu();break;/调用除留取余函数 case 2:shuzi();/调用数字分析函数 default:printf(输入指令不存在! else if(x=2)*用户名查询 *n 分析法 3 n fenxi();/调用分析函数查找方式不存在!请重新输入n运行结果分析测试实例:wangping kaifeng 123456 wangdoudou luoyang

6、456789 zhaijiajai zhengzhou 147258 sunxueping zhoukou 258369收获及体会本次试验电话号码查询系统,看起来也不是想我想象中的那么难,他比较具有针对性,要求我们用哈希函数解决这倒比较实用的题目,但是这道题目用到的哈希函数仅仅是哈希中的九牛一毛,虽然写了大程序,但是对哈希表的了解还是一无所知,数据结构这门课程我认为有点难,也许是我c语言基础不够强吧,好多代码都不是很理解,以至于不能够灵活运用,其实通过每次实验我们都可以发现,数据结构的知识好像就是草原的草,密密麻麻的等待我们去拔掉,这是一项浩大的工程等待我们去建设,与此同时,也要求我们要踏实的

7、完成每一次作业,认真的去分析重要的代码,只有端正自己的态度,才能不断地学到新的知识,提高自己。程序设计代码:#include #includestdio.h#define NULL 0 int *p;struct node /建节点 char name20,address50; char num11; node * next;struct Node /建节点 typedef node* Lnode;typedef Node Tnode;typedef struct lode Lnode next;lode;typedef struct/顺序表存储下的哈希表 int size; Tnode t1

8、0000;Qnode;typedef struct/链表存储下的哈希表 lode L10000;Pnode;void chuliu()/除留取余法查询电话号码 Qnode W; memset(W.t,0,sizeof(W.t);/初始化 Tnode s;输入录入数据个数: int n; scanf(n); W.size=n; /录入元素请输入你要录入的元素: while(n-)姓名 地址 电话号码n%s %s %s,s.name,s.address,s.num); int i = 3,key; /线性探测再散列处理冲突请输入您要查找的电话号码: /查找 char xnum11;%s,xnum)

9、; int i = 3; int key=xnum2-; while(xnumi!void shuzi()/按电话号码-数字分析法 Qnode q1;请输入您要输入的数据个数: int n,m1,m2; memset(q1.t,0,sizeof(q1.t); q1.size=n; for(int i=0;i10000;i+) strcpy(q1.ti.num,/置空 m1=m2=0;请输入您要录入的元素:/读入数据 _int64 key; key=(_int64)s.num)%10000; /处理冲突(方法同上)strcmp(q1.tkey.num,) q1.tkey=s; i=1; m1+;

10、 while(strcmp(q1.t(key+i)%10000.num,) i+; q1.t(key+i)%10000=s; int k= 3; _int64 key=(_int64)xnum; key=key%10000;strcmp(q1.tkey.num,xnum),q1.tkey.name,q1.tkey.address,q1.tkey.num); while(strcmp(q1.t(key+j)%10000.num,xnum) j+;,q1.t(key+j)%10000.name,q1.t(key+j)%10000.address,q1.t(key+j)%10000.num); vo

11、id fenxi() Qnode q2; memset(q2.t,0,sizeof(q2.t); q2.size=n; strcpy(q2.ti.name, key=(_int64)s.name)%10000; /处理冲突strcmp(q2.tkey.name, q2.tkey=s; while(strcmp(q2.t(key+i)%10000.name, q2.t(key+i)%10000=s;请输入您要查找的名字: char xname20;,xname); int k= 1; _int64 key=(_int64)xname;strcmp(q2.tkey.name,xname),q2.tkey.name,q2.tkey.address,q2.tkey.num); while(strcmp(q2.t(key+j)%10000.name,xname) j+;,q2.t(key+j)%10000.name,q2.t(key+j)%10000.address,q2.t(key+j)%10000.num);void menu() int main()/函数 menu(); return 0;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2