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

上传人:marr****208 文档编号:141329924 上传时间:2020-08-06 格式:DOC 页数:21 大小:163KB
返回 下载 相关 举报
数据结构电话号码查询系统设计报告及代码.doc_第1页
第1页 / 共21页
数据结构电话号码查询系统设计报告及代码.doc_第2页
第2页 / 共21页
数据结构电话号码查询系统设计报告及代码.doc_第3页
第3页 / 共21页
数据结构电话号码查询系统设计报告及代码.doc_第4页
第4页 / 共21页
数据结构电话号码查询系统设计报告及代码.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《数据结构电话号码查询系统设计报告及代码.doc》由会员分享,可在线阅读,更多相关《数据结构电话号码查询系统设计报告及代码.doc(21页珍藏版)》请在金锄头文库上搜索。

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

2、:电话号码查询系统学生姓名:王平系 别:计算机科学与通信工程学院专 业:计算机科学与技术班 级:10-01 学 号:541007010141指导教师:卢冰、李晔 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(

5、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!=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

6、(W.t(key+j)%21.num,xnum) j+;if(j=20)printf(查找元素不存在!);elseprintf(%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);pri

7、ntf( 除留取余法 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 if(x=2

8、)printf(*用户名查询 *n);printf( 分析法 3 n);printf(*n);fenxi();/调用分析函数elseprintf(查找方式不存在!请重新输入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; char num11; nod

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

11、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,)/查找,解决冲突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); /求和

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号