动态hashtable的C语言实现

    由于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, uint32_t newsize)
    插入:       hash_insert

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值