C语言使用哈希表的基本配置
·
在标准C语言中,并没有哈希表这种数据结构。因此各大大佬开源了自己的实现方式。
其中比较有名的就是本文要介绍的,uthash。
下面以介绍记录整形数据int为键的具体使用。

基本配置
在下载好资源后找出uthash.h该文件。然后只要在我们需要用的地方include即可。
然后非常重要一点,我们需要手动编写自己的哈希节点的数据结构。
// header
#include "uthash.h"
// hash node
struct MyHashNode {
// 至少存在一个用来作为key的元素
int key;
// 可选,作为记录的元素
int value;
// 核心 uthash.h 规定必须这么写,作为用来实现hash的句柄
查看UT_hash_handle是怎么设计的,可以得知这个句柄内部对前后和健值做了指向。
typedef struct UT_hash_handle {
struct UT_hash_table *tbl;
void *prev; /* prev element in app order */
void *next; /* next element in app order */
struct UT_hash_handle *hh_prev; /* previous hh in bucket order */
struct UT_hash_handle *hh_next; /* next hh in bucket order */
const void *key; /* ptr to enclosing struct's key */
unsigned keylen; /* enclosing struct's key len */
unsigned hashv; /* result of hash-fcn(key) */
} UT_hash_handle;
而具体的操作,是先定义一个结构体指针,并初始为NULL。在通过uthash.h内置的宏函数进行操作。
注意,增删的操作后会改变原hashtable的结构,因此需要传入原对象。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)