大连理工大学哈希表设计.docx

上传人:b****3 文档编号:5489105 上传时间:2022-12-17 格式:DOCX 页数:17 大小:169.93KB
下载 相关 举报
大连理工大学哈希表设计.docx_第1页
第1页 / 共17页
大连理工大学哈希表设计.docx_第2页
第2页 / 共17页
大连理工大学哈希表设计.docx_第3页
第3页 / 共17页
大连理工大学哈希表设计.docx_第4页
第4页 / 共17页
大连理工大学哈希表设计.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

大连理工大学哈希表设计.docx

《大连理工大学哈希表设计.docx》由会员分享,可在线阅读,更多相关《大连理工大学哈希表设计.docx(17页珍藏版)》请在冰豆网上搜索。

大连理工大学哈希表设计.docx

大连理工大学哈希表设计

大连理工大学

数据结构课程设计报告

题目:

哈希表的设计与实现

院(系):

计算机工程学院

专业:

计算机科学与技术

班级:

计科1091

学生:

周小晴

指导教师:

寇海洲孙成富

邱军林殷路

 

2012年10月

目录

一、设计目的3

二、设计内容3

三、程序设计步骤13

四、调试分析14

五、测试结果16

六、课程设计小结17

一、设计目的

1、能根据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,分析并正确确定数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。

2、提高程序设计和调试能力。

学生通过上机实习,验证自己设计的算法的正确性。

学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。

3、初步掌握软件开发过程中问题分析、系统设计、程序编码、测试等基本方法和技能。

4、训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

5、培养根据选题需要选择学习书籍,查阅文献资料的自学能力。

二、设计内容

1、系统名称:

哈希表的设计与实现

2、要求:

(1)设每个记录有下列数据项:

电话号码、用户名、地址;

(2)从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表;

(3)采用再哈希法解决冲突;

(4)查找并显示给定电话号码的记录;

(5)查找并显示给定用户的记录。

(6)在哈希函数确定的前提下,尝试各种不同类型的处理冲突的方法(至少两种),考察平均查找长度的变化。

 

三、程序设计步骤

1)Hash函数结构流程图。

(1)以号码为关键字的hash函数流程图

(2)以姓名为关键字的hash函数流程图

(3)添加信息节点流程图

 

(4)姓名查找流程图

(5)号码查询流程图

2)采用主要的数据结构类型。

1、电话号码哈希函数

voidhash(charnum[11])

{

//printf("在hash函数内部执行");

inti=2;

key=(int)num[1];

while(num[i]!

=NULL)

{

key+=(int)num[i];

i++;

}

key=key%20;

}

2、姓名哈希函数

voidhash2(charname[20])

{

inti=1;

key2=(int)name[0];

while(name[i]!

=NULL)

{

key2+=(int)name[i];

i++;

}

key2=key2%20;

}

3、再哈希函数

voidrehash(charnum[11])

{

inti=1;

key=(int)num[0];

while(num[i]!

=NULL)

{

key+=(int)num[i];

i++;

}

key=(key+i)%20;

}

boolreclash()

{

node*q=phone[key]->next;

if((q->name)!

=NULL)

returntrue;

else

returnfalse;

}

4、电话号码冲突处理

voidclash()

{

//电话号码冲突处理

node*q=phone[key]->next;

while((q->name)!

=NULL)

{

key=key+1;

q=phone[key]->next;

}

}

5、姓名冲突处理

voidclash2()

{

node*q=nam[key2]->next;

while((q->name)!

=NULL)

{

key2=key2+1;

q=nam[key2]->next;

}

}

6、姓名冲突处理后的查找

voidfind02(charname[20])

{

hash(name);

node*q=nam[key2]->next;

if(q==NULL)

{

printf("\n无此记录\n\n");

}

else

{

while(q!

=NULL)

{

if(strcmp(name,q->name)==0)

{

printf("\n\n|----------------------------|\n");

printf("姓名:

%s\n",q->name);

printf("地址:

%s\n",q->address);

printf("电话:

%s\n",q->num);

printf("|----------------------------|\n\n\n");

}

if(key2>0)

{

key2=key2-1;

}

q=nam[key2]->next;

}

}

}

7、电话号码冲突处理后的查找

voidfind01(charnum[11])

{

hash(num);

node*p=phone[key]->next;

if(p==NULL)

{

printf("\n无此记录\n\n");

}

else

{

while(p!

=NULL)

{

if(strcmp(num,p->num)==0)

{

printf("\n\n|----------------------------|\n");

printf("姓名:

%s\n",p->name);

printf("地址:

%s\n",p->address);

printf("电话:

%s\n",p->num);

printf("|----------------------------|\n\n\n");

}

if(key<20)

{

key=key+1;

}

p=phone[key]->next;

}

}

}

3)各软件模块之间的调用方式

该软件各个模块的调用主要是通过声明函数,和定义函数,再通过主函数调用实现的。

主函数:

intmain()

{

charnum[11];

charname[20];

create();

create2();

intsel;

while

(1)

{

menu();

scanf("%d",&sel);

if(sel==2)

{

printf("9号码查询\n8姓名查询\n");

intb;

scanf("%d",&b);

if(b==9)

{

printf("请输入电话号码:

\n");

scanf("%s",&num);

printf("\n输出查找的信息:

\n\n");

find01(num);

}

else

{

printf("请输入姓名:

\n");

scanf("%s",&name);

printf("\n输出查找的信息:

\n\n");

find02(name);

}

}

if(sel==3)

{

printf("姓名散列结果:

\n");

list2();

}

if(sel==1)

{

printf("请输入要添加的内容:

\n");

apend();

}

if(sel==4)

{

printf("号码散列结果:

\n");

list();

}

if(sel==5)

{

printf("列表已清空:

\n");

create();

create2();

}

if(sel==6)return0;

}

return0;

}

 

四、调试分析

调试的过程中,由于address[20]、name[8]和num[11]可以看出地址可输入的最大字符数是20,姓名可输入的最大字符数是8,电话号码都为11位。

容易输错,希望操作者注意。

五、测试结果

1、进入演示程序后,即显示主界面为:

查找记录:

姓名散列

号码散列:

清空记录:

六、课程设计小结:

一周的课程设计今天结束了。

很快,收获很多。

感觉像是一个从无到有的过程,非常的充实。

我做的课题是“哈希表问题”。

基本算法老师在课堂上有涉及过,但具体的还要靠自己去钻研。

我在一边做上机实验时,一边到图书馆查阅书籍,反复实践操作,往往比书本上得到的更多,体会也更深刻。

通过本次课程设计对哈希表问题有了一个比较全面的认识和了解。

哈希表问题,在存储位置和关键字之间建立对应关系f,根据对应关系f找到定值K。

若结构中存在关键字和定值K相等的记录,必定在f(K)的存储位置上,由此可以省去比较过程,直接找到所查记录。

哈希表其实不难,课程设计考验的是我们的学习态度,独立思考问题,和解决问题的能力。

把握这次机会肯定大有收获。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

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

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