C案例十七数据结构CAI哈希表演示.pptVIP

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
案例十七 数据结构CAI——哈希表演示 本案例知识要点 数组的使用 字符串指针的使用 类的设计和使用 哈希表的概念及构造 文件的使用 一、案例需求 案例描述 哈希表是一种很重要的数据结构,广泛应用于软件编程中。本案例实现哈希表的建立、查找等功能,以直观的方式显示了哈希表这种重要的数据存储及检索方法。 案例效果图 本案例效果如图所示。 哈希表案例运行效果图 功能说明 从一个文件中读入一系列的字符串建立Hash表。该文件格式为:每行一个字符串,表示一个名字,中间没有空格。 在建立好的Hash表的基础上完成查找、插入、求元素数等任务。 二、案例分析 哈希函数的构造方法 对数字的关键字有很多哈希函数的构造方法,如:直接定址法、数字分析法、平方取中法、折叠法、除留余数法以及随机数法等。如果是非数字关键字,则需先对其进行数字化处理。 本案例中的哈希函数采用了除留余数法,除留余数法的哈希函数构造算法如下: H(key) = key MOD p p≤m(表长) 其中:key为关键字,m为表长,p为除数。 关键问题是:如何选取p值? p应为不大于m的质数或20以内的质因子。 例如,当key = 12, 39, 18, 24, 33, 21时,由于所有key值都是含质因子3的关键字,若取p=9, 则会使得所有关键字均映射到地址0, 3, 6上,从而增加了“冲突”的可能性。 处理冲突的方法 处理冲突的实际含义是:为产生冲突的地址寻找下一个哈希地址。解决冲突的方法有很多,例如开放定址法(其中又分为线性探测再散列、平方探测再散列、随机探测再散列)和链地址法。本案例解决哈希冲突采用了线性探测再散列法,其算法如下。 为产生冲突的地址H(key)求得一个地址序列: H0, H1, H2, …, Hs 1≤s≤m?1 其中:H0 = H(key)。 Hi = ( H(key) + di ) MOD p i=1, 2, …, s 在本案例中,增量di按照线性探测再散列的要求取了最简单的整数1。 需要注意的是,随机探测时的m和di没有公因子。 哈希表的查找 给定K值,根据哈希函数求得哈希地址,若表中此位置上没有记录,则查找不成功;否则比较关键字,若与给定的值相等,则查找成功;否则根据处理冲突方法寻找下一地址,直至某个位置为空或所填记录的关键字等于给定值为止。 查找过程和造表过程一致。假设采用开放定址处理冲突,则查找过程为: 对于给定值K,计算哈希地址 i = H(K),如果r[i] = NULL,则查找不成功;如果r[i].key = K,则查找成功;否则求下一地址Hi,直至r[Hi] = NULL(查找不成功)或r[Hi].key = K(查找成功)为止。 理解了哈希表的概念和相关知识后,理解本案例就很容易了。本案例采用了类机制,将哈希表设计为一个类,封装了有关数据及操作,结构清晰,逻辑通畅。在哈希类成员函数的实现时,增加了一些错误处理机制,包括提示输入错误、警告溢出等。由于类的可扩充性,利用添加成员函数也可以轻易增加程序的功能。案例需要使用一个文本文件NAME.txt,该文件用于长期保存哈希表中的数据。NAME.txt文件内容如图所示。 NAME.txt文件内容 三、案例设计 四、案例实现 五、案例总结与提高 案例总结 本案例采用的数据结构是哈希表,哈希函数的设计是使用哈希表的核心问题,很多密码设计都和哈希函数有关。本案例中的哈希函数未必是最好的,希望有兴趣的同学能研究一下更好的哈希函数。 案例提高 在全面理解的基础上,读者可以对本案例进行改动与提高: 可以考虑采用更高效、冲突更少的哈希函数(HashFun(const string s))来完成本案例。 可以考虑采用一种更直观的显示方式,能演示每次插入一个元素后哈希表的变化。 第*页 共26页 目录 退出 目录 * HashTable类图 主程序调用流程图 insert子功能流程图 第*页 共26页 目录 退出 目录

文档评论(0)

118books + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档