C语言链表式实现哈希表

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

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值