代码拉取完成,页面将自动刷新
#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
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。