- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构I课程设计报告
2014-2015学年第一学期计算机学院软件工程专业I课程设计报告
133302班
2014年12月31日
课题名称:
哈希表设计33555 杨 霞:杨冰宇:
均负责问题分析、编码
及设计报告整理
目录
第1章 引言 1
1.1设计 1
1.2设计内容 1
第2章 需求分析 2
2.1程序功能 2
2.2输入输出要求 2
2.3 测试数据 2
第3章 系统分析与设计 3
3.1概要设计 3
3.2 详细设计 4
第4章 编码与测试 8
4.1测试数据,测试输出的结果 8
4.2 每个模块设计和调试时存在问题 10
4.3算法的改进设想 12
第5章 结束语 13
5.1心得体会 13
参考文献 15
附录1 部分系统界面 16
附录2 部分源程序 1
第1章 引言
1.1设计目的1.学会根据实际问题建立哈希表,并实现其查找功能。
2.哈希表的思想就是根据关键码值(Key value)而直接进行访问的。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做,存放记录的叫做。
3.使用法获得哈希地址。
4.使用再散列地址解决哈希冲突问题。
5.查阅书籍,自我思考,解决实际问题。问题描述
针对某个集体中人名设计一个哈希表,使得平均查找长度不超过R,并完成相应的建表和查表程序。
基本要求
假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用线性探测散列法或链地址法处理冲突。
测试数据
取读者周围较熟悉的30个人名。
选作内容
(1)从教科书上介绍的集中哈希函数构造方法中选出适用者并设计几个不同的哈希函数,比较他们的地址冲突率(可以用更大的名字集合作实验)。
(2) 研究这30个人名的特点,努力找一个哈希函数,使得对于不同的拼音名一定不发生地址冲突。
(3) 在哈希函数确定的前提下尝试各种不同处理冲突的方法,考察平均查找长度的变化和造好的哈希表中关键字的聚集性
2.3测试数据:
在同同学姓名取由的作为测试数据来检验哈希表的查找功能。
第3章 系统分析与设计
3.1概要设计
考虑到本学期学习的面向对象程序设计,就选择C++作为编程面向对象的类地封装姓名表哈希表的,了问题
class student
{
public:
void init_name();
void display_name();
char *p1;
int m;
};
class Hash
{
public:
void init_hash();
void display_hashlist();
void find();
char *m;
int n;
int s;
};
3.2 详细设计
3.2.1模块功能说明
如函数功能、入口及出口参数说明,函数调用关系描述等
void InitNameTable()
前置条件::
输出::元素
init_hash()
前置条件::::哈希表
前置条件::
输出::
前置条件::
输出::
Void FindName()
前置条件::
输出:输入姓名在哈希表返回该人的信息:
void main() //主函数
3.2.2重要模块的算法设计说明
建立哈希表
第4章 编码与测试
4.1测试数据,测试输出的结果
显示姓名
显示哈希表
查找
4.2 每个模块设计和调试时存在问题
最初选择用结构体存储表后来选择类来封装散列表的属性。
:
2.姓名表的初始化遇到错误
刚开始用哈希表姓名表许多错误单独列出哈希表的类其属性和函数
3.出现无法实现查找操作问题
不断检查程序,同学,最终发现处理冲突的函数不当,经过不断的修改,最终功能正常实现如
出现平均查找长度达不到要求的问题
不断更改处理冲突的方法,用随机函数求得伪使用再散列法处理冲突的方法解决了问题。
srand((int)time(0));????????for(i=0;i30;i++)?????????????????//用随机函数求得伪随机数列d[i](在1到50之间)???????d[i]=1+(int)(HashList*rand()/(RAND_MAX+1.0));???//RAND_MAX其值最小为32767,最大为2147483647
4.3算法的改进设想
1.设置添加姓名表的
2使程序自动为查找数据选择合适的处理冲突
5.1心得体会本次课
文档评论(0)