加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
HashTable.h 2.16 KB
一键复制 编辑 原始数据 按行查看 历史
ZeroTwo 提交于 2022-12-10 15:37 . 第一次提交
#ifndef __HASHTABLE_H
#define __HASHTABLE_H
#ifdef __cplusplus
extern "C" {
#endif
/*
该哈希表为了节省空间,存储的是键值地址,不同的结构体变量数据中键值地址可能不同,
查表后请通过返回的键值地址找到结构体变量数据的存储地址
*/
//哈希节点
typedef struct HASH_NODE
{
void* pKey;//指向存入键值
struct HASH_NODE* pNext;//如果哈希值相同,往后链接
}Hash_Node;
//哈希表(采用链地址法解决哈希冲突)
typedef struct HASH_TABLE
{
unsigned int HashValueNumber;//哈希值总数
unsigned int UsedHashValueNumber;//已被使用的哈希值总数
Hash_Node** pTable;//哈希表
char (*is_key)(void*, void*);//哈希表通过该回调函数判断键值是否相等,相等时返回1,不等时返回0
unsigned int (*hash_func)(const char*, unsigned int);//计算哈希值的回调函数
}Hash_Table;
//哈希表信息,用于查看哈希表当前的一些状态
typedef struct
{
unsigned int HashValueNumber;//哈希值总数
unsigned int UsedHashValueNumber;//已被使用的哈希值总数
unsigned int HashCollisionNumber;//发生哈希冲突总次数
unsigned int CollisionHashValueNumber;//冲突哈希值数量
unsigned int MaxListLen;//最长哈希冲突链长度
double AveListLen;//平均哈希冲突链长度
unsigned int TableSize;//哈希表所占用空间大小(单位字节)
}Hash_Table_Msgs;
/*哈希表API*/
Hash_Table* hash_createHashTable(unsigned int HashValueNumber, char (*pIs_key)(void*, void*), unsigned int (*pHash_func)(const char*, unsigned int));//创建哈希表
char hash_pushHashTable(Hash_Table* pHash_table,const char* pKey, unsigned int key_len);//键-入哈希表
char hash_popHashTable(Hash_Table* pHash_table,const char* pKey, unsigned int key_len);//键-出哈希表
char hash_deleteHashTable(Hash_Table* pHash_table);//删除哈希表
void* hash_findHashTable(Hash_Table* pHash_table, const char* pKey, unsigned int key_len);//查表,返回对应键地址
Hash_Table_Msgs hash_readHashTableMsgs(Hash_Table* pHash_table);//读哈希表信息
/*一些哈希函数,传入键值与键值长度,返回哈希值*/
unsigned int ELFHash(const char* key, unsigned int key_len);
unsigned int DJBHash(const char* key, unsigned int key_len);
unsigned int JSHash(const char* key, unsigned int key_len);
unsigned int SDBMHash(const char* key, unsigned int key_len);
unsigned int APHash(const char* key, unsigned int key_len);
#ifdef __cplusplus
}
#endif
#endif // !__HASHTABLE_H
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化