"大数据结构课程设计--哈希表实验报告材料"
版权申诉
5星 · 超过95%的资源 180 浏览量
更新于2024-03-04
1
收藏 1.74MB DOC 举报
char name[20]; //姓名
int studentID; //学号
long phoneNumber; //电话号码
} Student;
typedef struct//哈希表节点
{
int key; //关键字
Student data; //学生信息
} HashNode;
typedef struct//哈希表
{
HashNode *hashNodes; //哈希节点数组
int size; //哈希表大小
} HashTable;
在上述代码中,我们定义了学生结构体Student,包含了姓名、学号和电话号码等信息。然后定义了哈希表节点结构体HashNode,包含了关键字key和学生信息data。最后定义了哈希表结构体HashTable,包含了哈希节点数组和哈希表大小。
2、哈希函数的设计和说明
我们使用了除留余数法来构造哈希函数,具体代码如下:
int hashFunction(char *name, int size)
{
int hash = 0;
while (*name)
{
hash = (hash * 31 + *name) % size;
name++;
}
return hash;
}
在上述代码中,我们通过遍历姓名字符串,将每个字符的ASCII码值乘以31再加上前一个字符的哈希值,最后取余数得到哈希值。
3、线性探测法的设计和说明
我们使用了线性探测法来解决哈希冲突,具体代码如下:
void insert(HashTable *hashTable, Student student)
{
int key = hashFunction(student.name, hashTable->size);
while (hashTable->hashNodes[key].data.phoneNumber != 0)
{
key = (key + 1) % hashTable->size;
}
hashTable->hashNodes[key].key = key;
hashTable->hashNodes[key].data = student;
}
在上述代码中,我们通过哈希函数计算关键字,然后若该位置已经被占用,则向后寻找下一个位置,直到找到一个空位置插入数据。
4、查找功能的设计和说明
我们通过哈希函数计算关键字,然后通过循环来查找对应的学生信息,具体代码如下:
Student find(HashTable *hashTable, char *name)
{
int key = hashFunction(name, hashTable->size);
while (strcmp(hashTable->hashNodes[key].data.name, name) != 0)
{
key = (key + 1) % hashTable->size;
}
return hashTable->hashNodes[key].data;
}
在上述代码中,我们通过哈希函数计算关键字,然后若该位置的姓名和要查找的姓名不相等,则向后寻找下一个位置,直到找到对应的学生信息。
5、实验结果与分析
通过实验,我们成功设计了一个哈希表数据结构用来存放30个人名,通过哈希函数和线性探测法解决了哈希冲突,并能够进行数据的插入和查找操作。实验结果表明,我们的哈希表能够高效地存储和查找学生信息,具有较好的性能表现。
综上所述,本次实验中我们设计了一个哈希表数据结构,并通过哈希函数和线性探测法实现了哈希表的建立、插入和查找操作。该哈希表能够高效地存储和查找学生信息,为实际应用提供了一种有效的数据结构。通过本次实验,我们对哈希表的原理和实现方法有了更深入的理解,提高了对算法与数据结构的掌握能力。
2013-03-04 上传
2011-05-16 上传
2023-03-10 上传
2023-12-24 上传
2019-11-12 上传
156 浏览量
2013-03-06 上传
码农.one
- 粉丝: 7
- 资源: 345
最新资源
- JHU荣誉单变量微积分课程教案介绍
- Naruto爱好者必备CLI测试应用
- Android应用显示Ignaz-Taschner-Gymnasium取消课程概览
- ASP学生信息档案管理系统毕业设计及完整源码
- Java商城源码解析:酒店管理系统快速开发指南
- 构建可解析文本框:.NET 3.5中实现文本解析与验证
- Java语言打造任天堂红白机模拟器—nes4j解析
- 基于Hadoop和Hive的网络流量分析工具介绍
- Unity实现帝国象棋:从游戏到复刻
- WordPress文档嵌入插件:无需浏览器插件即可上传和显示文档
- Android开源项目精选:优秀项目篇
- 黑色设计商务酷站模板 - 网站构建新选择
- Rollup插件去除JS文件横幅:横扫许可证头
- AngularDart中Hammock服务的使用与REST API集成
- 开源AVR编程器:高效、低成本的微控制器编程解决方案
- Anya Keller 图片组合的开发部署记录