void FindName() { char name[20] = {0}; int hashCode = 0, si = 1; printf("\n请输入要查找的姓名的拼音:"); scanf("%s", name); getchar(); hashCode = gethashCode(name); int adr = hashCode % P; if (Hash[adr].key == 0) { printf("\n没有找到该姓名!\n"); return; } if (Hash[adr].key == hashCode && strcmp(Hash[adr].name, name) == 0) { printf("\n姓名:%s 关键字:%d 地址:%d 查找长度为: 1\n", Hash[adr].name, hashCode, adr); } else { int currAddr = adr; do { si++; adr = (adr + 1) % HASH_LEN; if (Hash[adr].key == hashCode && strcmp(Hash[adr].name, name) == 0) { printf("\n姓名:%s 关键字:%d 地址:%d 查找长度为:%d\n", Hash[adr].name, hashCode, adr, si); break; } } while (adr != currAddr); if (adr == currAddr) { printf("\n没有找到该姓名!\n"); return; } } }

时间: 2024-01-19 10:02:55 浏览: 11
这段代码实现了一个基于散列表的姓名查找函数。用户输入要查找的姓名的拼音,然后计算出该姓名对应的哈希值,再根据哈希值找到对应的散列表地址,如果该地址处的元素的关键字与计算出的哈希值相等且姓名也相等,则找到了该姓名,否则就需要在散列表中向后遍历,直到找到该姓名或者遍历完所有元素为止。如果最终还是没有找到该姓名,则输出相应的提示信息。 函数中用到了一个名为gethashCode()的函数,它的作用是计算字符串的哈希值。整个函数的实现比较简单,但需要注意的是,如果散列表中的元素个数很少,而哈希表的长度又很大时,会造成很多空间浪费,因为大部分散列表中的元素都是空的。因此,在实际应用中,需要根据实际情况来选择哈希表的长度和哈希函数的设计。
相关问题

0_10_java中==和equals和hashcode的区别

在Java中,"=="、equals()和hashCode()是用于比较对象的三个不同的方法。 首先,"=="是一个比较运算符,用于比较两个对象的引用是否相等。如果两个对象引用相同,则返回true;否则,返回false。这意味着它仅比较对象的内存地址。例如: ``` String a = "abc"; String b = "abc"; System.out.println(a == b); // 返回true,因为a和b引用相同的对象 ``` 其次,equals()是Object类的方法,被继承到其他类中。它用于比较两个对象的内容是否相等。默认情况下,equals()使用"=="来判断两个对象的引用是否相等。但是,可以通过重写equals()方法来改变比较规则。例如: ``` String a = "abc"; String b = "abc"; System.out.println(a.equals(b)); // 返回true,因为a和b的内容相等 ``` 最后,hashCode()是Object类的方法,用于获取一个对象的哈希码。哈希码是一个整数值,在哈希表等数据结构中用于快速查找。在默认情况下,hashCode()方法返回对象的内存地址的哈希码。hashCode()方法在需要使用哈希表存储对象时经常被用到。例如: ``` String a = "abc"; System.out.println(a.hashCode()); // 返回一个整数哈希码 ``` 总结起来,"=="用于比较两个对象的引用是否相等,equals()用于比较两个对象的内容是否相等,而hashCode()则用于获取对象的哈希码。在某些情况下,我们可能需要重写equals()和hashCode()方法,以便根据对象的特定属性进行比较和哈希码的生成。

==和equles 和hashcode 的区别

"=="、equals()和hashCode()都是Java中用于比较对象的方法,但它们之间有一些重要的区别。 1. "=="运算符:用于比较两个对象的引用是否相同。如果两个对象的引用指向同一个内存地址,则返回true;否则返回false。 2. equals()方法:用于比较两个对象的内容是否相等。equals()方法是Object类中的方法,可以被子类覆盖重写以实现自定义的相等判断逻辑。默认情况下,equals()方法与"=="运算符的行为相同,即比较两个对象的引用是否相同。 3. hashCode()方法:用于获取对象的哈希码值。hashCode()方法也是Object类中的方法,可以被子类覆盖重写以实现自定义的哈希算法。哈希码是一个整数,它代表了对象的特征信息。在使用一些基于哈希表的数据结构(如HashMap、HashSet等)时,hashCode()方法用于确定对象在哈希表中的存储位置。 区别: - "=="比较的是两个对象的引用,即内存地址,用于判断两个对象是否指向同一个实例。 - equals()比较的是两个对象的内容,可以根据需要自定义判断逻辑。一般来说,如果重写equals()方法,就应该同时重写hashCode()方法。 - hashCode()返回一个整数,用于确定对象在哈希表中的存储位置。两个相等的对象必须具有相同的哈希码,但两个哈希码相等的对象不一定相等。 在使用自定义类作为HashMap的键时,通常要同时重写equals()和hashCode()方法,以保证对象能正确地存储和检索。

相关推荐

最新推荐

recommend-type

Java中equals,hashcode和==的区别

本文中详细的阐述了Java中经常遇到的equals、hashcode以及“==”号三者之间的区别
recommend-type

java 中HashCode重复的可能性

主要介绍了java 中HashCode重复的可能性的相关资料,这里提供实例及测试代码,需要的朋友可以参考下
recommend-type

equals与hashCode方法讲解

这里是一个文档,里边讲解了hashCode与equals方法使用,大家要是不明白,可以去看看
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

机器学习怎么将excel转为csv文件

机器学习是一种利用计算机算法和统计数据的方法来训练计算机来进行自动学习的科学,无法直接将excel文件转为csv文件。但是可以使用Python编程语言来读取Excel文件内容并将其保存为CSV文件。您可以使用Pandas库来读取Excel文件,并使用to_csv()函数将其保存为CSV格式。以下是代码示例: ```python import pandas as pd # 读取 Excel 文件 excel_data = pd.read_excel('example.xlsx') # 将数据保存为 CSV 文件 excel_data.to_csv('example.csv', index=
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

实现实时监控告警系统:Kafka与Grafana整合

![实现实时监控告警系统:Kafka与Grafana整合](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9BVldpY3ladXVDbEZpY1pLWmw2bUVaWXFUcEdLT1VDdkxRSmQxZXB5R1lxaWNlUjA2c0hFek5Qc3FyRktudFF1VDMxQVl3QTRXV2lhSWFRMEFRc0I1cW1ZOGcvNjQw?x-oss-process=image/format,png) # 1.1 Kafka集群架构 Kafka集群由多个称为代理的服务器组成,这