哈希表

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章