构建2阶查找上限的通讯录散列表实现与查找程序

4星 · 超过85%的资源 需积分: 15 14 下载量 52 浏览量 更新于2024-09-19 1 收藏 67KB DOC 举报
本项目是关于设计一个基于散列表实现的通讯录查找系统,旨在实现高效的查找功能,平均查找长度限制在R以内。核心知识点包括以下几个方面: 1. **数据结构**: - 使用`Record`结构体来表示通讯录中的每个条目,包含用户名(NA)、电话号码(NAtel)和地址(NAadd)三个数据项。 2. **哈希表设计**: - 哈希表由`HashTable`结构体定义,包含`elem`数组用于存储元素指针,`count`表示当前元素个数,`size`表示当前的存储容量。这里选择`HASHSIZE`为53,使用除留余数法(取模)作为哈希函数,确保元素均匀分布。 3. **哈希冲突处理**: - 采用二次探测再散列法解决哈希冲突,即当发生冲突时,不是简单地将元素放在下一个位置,而是根据特定的规则(如线性探测)找到下一个空闲的位置,直到找到合适的插入位置。 4. **用户输入与操作**: - 用户通过键盘输入30个人的姓名、电话号码和地址信息,这些信息被分别用于创建散列表中的记录。输入部分使用`getin`函数,提示用户输入记录的数量和具体信息。 5. **比较函数**: - `eq` 函数用于比较两个字符串,作为哈希表中的关键字比较,如果相等则返回`SUCCESS`,否则返回`UNSUCCESS`。 6. **查找功能**: - 能够根据给定的电话号码查找对应的通讯录记录,并显示相关信息。这涉及到哈希表的查找算法,如线性探测查找,找到指定电话号码对应的记录。 7. **性能优化**: - 由于人名长度限制在19个字符以内,可以利用C语言内置的字符编码函数处理。对于过长的人名,需进行折叠处理以适应哈希表的存储要求。 8. **测试与实现**: - 提供了实际应用中的测试数据,即周围熟悉人员的30个姓名及其相关联系信息,用于检验系统的功能完整性和效率。 综上,这个项目不仅涵盖了数据结构(散列表)、哈希函数、冲突解决策略以及用户交互,还涉及到了性能优化和实际应用中的数据处理。通过完成这个项目,学生将深入了解如何在实际编程环境中设计和实现高效的通讯录查找系统。