动态hashtable的C语言实现

本文介绍了如何在C语言中实现动态哈希表,包括数据结构设计、哈希函数选用(luaS_hash)、插入、删除、查找和调整大小等操作。支持字符串和整数类型的键,值为void*类型,且提供了扩展接口来处理键值一对多的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    由于C语言中缺乏像C++中的数据容器,所以用C语言自己对hashtable做了一个前期的原理分析及函数定义,以备自己以后查用。字符串的hash处理采用lua源码中的luaS_hash函数。

hash数据存储模块:(如果两个key值一模一样则存储在同一个节点的单向链表hash_value 中,当节点数达到申请的节点数,则将节点数翻倍重新计算节点在table中的存储位置)

hash数据结构:
struct hash_value {
  union{
    uint32_t k_num;
    char k_char[32];       //最大支持32个字节的key值长度 
  }key;
  void * data;             //数据存储位置
  struct hash_value *next; //同一个hash值的数据存储链表
};
typedef struct hash_tab {
  struct hash_value ** hash;
  uint32_t nuse;   //hashtab中已插入的数据条数
  uint32_t size;   //当前hashtab的大小。
}hash_tab;


通过采用key-value的方式,key支持int,string类型数据,value为void*类型。hash函数采用luaS_hash函数原型。
提供创建:       hash_create(hash_tab *tab, uint32_t size)
    修改tab大小:hash_resize(hash_tab *tab, uint3

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值