C语言中, 标准库没有提供哈希表, 哈希表有多种实现方式,可参考以下实现——
以下哈希表结构为 : 指定长度的哈希表长度,冲突的节点使用延展链表存储数据(后面统一称为冲突链表)
一、基本结构体定义
1、存储数据的结构体
/* 该结构体成员根据需要设定即可 */
typedef struct tagHashData {
int idx;
int value;
} HashData;
2、哈希表数据节点的结构体
typedef struct tagHashNode {
HashData node;
int valid; /* 这里判断该节点已使用 */
struct tagHashNode *next;
} HashNode;
3、哈希表主体的结构体
typedef struct tagHash {
int length;
HashNode **hashList;
} Hash;
二、哈希表基础功能的实现
1、哈希索引计算函数
/* 索引分布计算函数, 此处为绝对值, 一般使用CRC计算 */
unsigned int GetHashPosition(int num)
{
if (num < 0) {
return ~(--num);
}
return num;
}
2、创建哈希表
/* 初始化指定长度大小的哈希表 */
Hash *InitHash(int length)
{
/* byteLength 用于存储传入 length 的字节数, 申请哈希表堆内存使用 */
unsigned int byteLength;
Hash *hh = NULL;
if (length == 0) {
printf("parameter erro

本文介绍了如何在C语言中自定义实现哈希表,通过链表解决哈希冲突。内容涵盖哈希表的基本结构体定义,包括存储数据的结构体、哈希表数据节点和哈希表主体的结构体。接着详细阐述了哈希表的基础功能实现,如哈希索引计算、创建、查找、插入、打印数据以及销毁哈希表的操作,并提供了测试函数以验证功能的正确性。
最低0.47元/天 解锁文章
2332

被折叠的 条评论
为什么被折叠?



