一直觉得哈希表很神秘,只知道根据值得大小来排列的,但是不知道这个值是怎么来的,这两天看了几个博客,终于弄懂了哈希表是怎么一回事,哈希表的每个节点都有一个类型为字符串的key,而通过这个key值可以计算出这个节点属于哪一行(姑且称其为行,我也不知道该如何表达)。找到行后再讲该节点加入到该行的队列中。获取行号的方法如下:
unsigned int h=0;
while(*key){
h=h*31+*key;
key++;
}
其实这个计算方法我也是网上抄来的,一般只要把key值能均匀的分布到每一行的算法都可以。
然后根据这个表以供有多少行用获取的h值对一共的行数取余。
节点结构定义如下
struct node{
struct node *node;
char *key;
void *value;
}
哈希表定义如下
struct hashtable{
struct node **line;
}
或者struct node hashtable[];