一直覺得哈希表很神祕,只知道根據值得大小來排列的,但是不知道這個值是怎麼來的,這兩天看了幾個博客,終於弄懂了哈希表是怎麼一回事,哈希表的每個節點都有一個類型爲字符串的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[];