- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
哈希表的设计与运用
目 录
第1章 需求分析 ……………………………………………………
第2章 概要设计 ……………………………………………………
第3章 详细设计 ……………………………………………………
第4章 调试分析……………………………………..........................
第5章 核心源程序清单和执行结果……………………………....
第6章 设计体会………………………………………….................
第7章 附录…………………………………………………...........
需求分析
1.问题描述:针对某个集体(比如你所在的班级)中的人名设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序;
2.人名为中国人姓名的汉语拼音,人名有30个,平均查找长度的上限为2;
3.用伪随机探测再散列法处理冲突;
4.输入为所要查询的人姓名(拼音);输出为该关键字的查找信息;
5.测试数据:
输入:lihaojie
输出:姓名:lihaojie 关键字:837 查找长度:1
输入:wangzhou
输出:姓名:wangzhou 关键字: 查找长度:3
输入:d
输出:显示哈希表
6.本程序用C++语言编写,在vc++6.0环境下运行。
概要设计
2.1算法思想:
1 定义:
哈希表是为了便于快速搜索而组织的键/值组合的集合。Hash Table是一种数组,可以用任意简单变量值来访问其元素,这种数组叫哈希表。
2 优点:
哈希表最大的优点就是把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间;而代价仅仅是消耗比较多的内存。然而在当前可利用内存越来越多的情况下,用空间换时间的做法是值得的。另外,编码比较容易也是它的特点之一。
3 基本原理:
使用一个下标范围比较大的数组来存储元素。可以设计一个函数(哈希函数,也叫做散列函数),使得每个元素的关键字都与一个函数值(即数组下标,hash值)存在一一对应的关系,于是用这个数组单元来存储这个元素。也可以简单的理解为,按照关键字为每一个元素“分类”。
4哈希表的不可避免冲突(collision)现象:
对不同的关键字可能得到同一个哈希地址 即key1≠key2,而f(key1)=f(key2)。因此,在建造哈希表时不仅要设定一个好的哈希函数,而且要设定一种处理冲突的方法。用伪随机探测法。求下一个开放地址的公式为:Hi = (H(k)+di) MOD m
注意:Di=伪随机数序列;
2.2关于程序设计的基本操作:
1.对哈希表的操作
InitNameList()
操作结果:姓名(结构体数组)初始化
CreateHashList()
操作结果:建立哈希表
FindList()
操作结果:在哈希表中查找
Display()
操作结果:显示哈希表
2.主程序
int main()
{
初始化;
InitNameList();
CreateHashList();
do {
接受命令;
处理命令;
}while(“命令”=“退出”);
return 0;
}
3.本程序包含的模块
}
1)初始化操作,结构体定义;
2)姓名结构体建立模块;
3)建立哈希表模块;
4)查找模块;
5)显示哈希表模块;
4)主程序模块
4 程序流程图
详细设计
主要功能模块
模块一:建立哈希表
void CreateHashList() //建立哈希表
{ int i;
for(i=0; iHASH_LENGTH;i++)
{ HashList[i].py=;
HashList[i].k=0;
HashList[i].si=0;
}
for(i=0;iHASH_LENGTH;i++)
{ int sum=0;
int adr=(NameList[i].k)%M; //哈希函数
int d=adr;
if(HashList[adr].si==0) //如果不冲突
{ HashList[adr].k=NameList[i].k;
HashList[adr].py=NameList[i].py;
HashList[adr].si=1;
}
else //冲突
{ do
{ d=(d+NameList[i].k%10+1)%M;
//伪随机探测再散列法处理冲突
您可能关注的文档
- 北京大学考博英语阅读理解模拟题.pdf
- 北京大学西方经济学考研参考书分数线真题.pdf
- 北京市农村基础设施建设的SWOT分析及对策研究.pdf
- 北京市论文北京市行道树结构分析与健康评价.doc
- 北京市浅山区土地可持续利用的困境与出路.pdf
- 北京成人本科学士学位英语考试真题及答案.doc
- 北京市通州区初三综合练习英语试卷(二).doc
- 北京爱恩科技试题.doc
- 北京林业大学考博英语模拟真题及其解析.pdf
- 北京理工大学控制工程(专硕)考研 招生人数 参考书 报录比 复试分数线 考研真题 考研经验 招生简章.doc
- 教师版2018-2019高二上学期语文期末考前密卷.pdf
- 班主任培训心得体会优秀.pptx
- 工业互联网平台网络流量整形技术在工业互联网安全防护中的应用报告.docx
- 2025年文化遗产数字化保护与文化遗产保护行业竞争力提升研究报告.docx
- 2025年跨境电商用户物流体验优化策略与问题解决报告.docx
- 2025年物流园区能源管理系统优化与绿色物流发展前景分析报告.docx
- 锂矿资源开发与新能源汽车电池产业国际合作研究报告.docx
- 二手汽车美容服务信用修复策略.docx
- 2025年化工企业碳中和转型政策环境与技术挑战分析报告.docx
- 2025年固态电池在新能源汽车充电桩中的应用与安全性研究报告.docx
文档评论(0)