hash表的特点就是对于一堆有key值的数据块(同一种数据结构),通过将这些数据块挂在hash表上之后,可以通过key值在线性时间内查询到相应的数据块。
数据结构:
typedef struct hash_node{
hash_node *next; //下一个hash节点
hash_node *prev; //前一个hash节点
type *st; //此处为hash节点所指向数据块指针。此处可以通过c++的模板或者c语言的宏定义来实现重载,这里仅给出伪代码
}*hash_list;
typedef struct hash_head{
hash_node *first;
}hash_head;
typedef struct hash_table{
int size; //key映射出的index最大值,此值限制hash桶的大小
int (* pfunc) (void *); //根据不同情形定义不同的hash函数,可以使用linux自带的jhash,此函数将key映射成index
hash_head * hash_bucket; //哈希桶,通过index找到对应的桶,并遍历挂在下面的链表找到最终对应key值的数据块
}hash_table;