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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

郑州轻工业学院

课程设计任务书

题目电话号码查询系统

专业、班级计科10-01学号41姓名王平

主要内容:设计哈希表实现电话号码查找系统

基本要求:从键盘输入各记录,分别以电话号码和用户名为关键字设计哈希表;采用不同的哈希函数,比较冲突率;采用适当的方法解决冲突;在哈希函数确定的前提下,尝试不同类型处理冲突的方法,考察平均查找长度的变化;查找并显示给定电话号码的记录;查找并显示给定用户名的记录。

主要参考资料等:数据结构课本(c语言版)

完成期限:21012年6月21号

指导教师签名:

课程负责人签名:

12年 6 月 21 日

郑州轻工业学院本科

数据结构课程设计总结报告

设计题目:电话号码查询系统

学生姓名:王平

系别:计算机科学与通信工程学院

专业:计算机科学与技术

班级:10-01

学号:41

指导教师:卢冰、李晔

2012年 6月 21 日

设计题目

题目:电话号码查询系统

每个记录有下列数据项:电话号码、用户名、地址;从键盘输入各记录,分别以电话号码和用户名为关键字设计哈希表;采用不同的哈希函数,比较冲突率;采用适当的方法解决冲突;在哈希函数确定的前提下,尝试不同类型处理冲突的方法,考察平均查找长度的变化;查找并显示给定电话号码的记录;查找并显示给定用户名的记录。

运行环境(软、硬件环境)

Vc6.0

算法设计的思想

电话号码查询系统主要是考察我们对哈希查找的掌握。

题目要求用电话号码和姓名两种方式查找;第一大部份是用电话号码查找,第二部分是用姓名查找。

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

2:姓名查找(先建立哈希表读入数据,然后再处理冲突,查找)方式:这个过程中,我选取了数字分析法,解释如上。

主菜单的设计在设计效果上已经显示,不过多说明。

主菜单建立->除留取余和数字分析法存储->开放地址法解决冲突->查找。

算法设计分析

这段代码是哈希存储时从第三个数开始求,提高了代码效率。int i = 3;

while(s.num[i]!='\0') //关键字

{

key+=(s.num[i]-'0'); //关键字求和

i++;

}

key=key%21;

线性探测再散列处理冲突

if(!strcmp(W.t[key].num,""))//查找,解决冲突W.t[key]=s;

else

{//第一次没解决彻底,继续解决冲突

int j=1;

while(strcmp(W.t[(key+j)%21].num,"")) j++;

W.t[(key+j)%21]=s;

}

}

查找代码;

while(xnum[i]!='\0')

{

key+=(xnum[i]-'0'); //求和

i++;

}

key=key%21;

if(!strcmp(W.t[key].num,xnum))//第一次查找,如果值相等直接赋值

printf("%s %s %s\n",W.t[key].name,W.t[key].addres s,W.t[key].num);

else

{//第一次没找到,继续查找

int j=1;

while(strcmp(W.t[(key+j)%21].num,xnum)) j++;

if(j==20)

printf("查找元素不存在!");

else

printf("%s %s %s\n",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");

printf(" 除留取余法 1 \n");

printf(" 数字分析法 2 \n");

printf("****************************\n");

printf("请输入y值:\n");

scanf("%d",&y);

while(y<3)

{

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);

相关文档
最新文档