簡單好用的hash表 uthash

2021-09-06 12:20:44 字數 1033 閱讀 2154

在軟體開發中,不可不免的會使用到hash表,hash表的優點這裡就不說了,以下介紹乙個hash表的c實現,

uthash是用巨集實現的,使用的時候非常方便,只用包含uthash.h即可。

uthash的三個資料結構:

typedef struct

ut_hash_bucket ut_hash_bucket;

ut_hash_bucket作用提供根據hash進行索引。

typedef struct

ut_hash_table ut_hash_table;

ut_hash_table可以看做hash表的表頭。

typedef struct

ut_hash_handle ut_hash_handle;

ut_hash_handle,使用者自定義資料必須包含的結構。

三種資料結構的關係如下:

說明:每乙個節點(使用者自定義的)必須包含乙個ut_hash_handle hh

key:使用者自定義,可以是int, string和指標。

hh_prev: 指向前乙個ut_hash_handle 

hashv:根據key計算出的hash值

prev: 指向前乙個資料節點(hash衝突時)

uthash使用**例子

#include "

uthash.h

"#include

/*malloc

*/#include

/*printf

*/#include

typedef

struct

example_user_t example_user_t;

int main(int argc,char *argv)

for(user=users; user != null; user=(example_user_t*)(user->hh.next))

return

0;

}

暴雪的hash表

具體流程就是建立乙個較大的陣列,然後通過特定的演算法,將字串轉成整數,然後存入到這個陣列中,然後可以通過取模,獲得這個string在陣列中的下標。include include include define maxmpqhashtablelen 8192 typedef struct mpqhash...

hash表的理解

hash演算法可以把檔案轉換成一行字串,而且每個檔案有單獨的hash值,基本不會重複,這樣通過計算兩個檔案的hash值可以很快的確定兩個檔案是否相同。hash的運算只能從檔案到hash值,但是從hash值到檔案是幾乎不可能的。修改檔案和字尾名不會改變檔案的hash值。常用的hash演算法有md5和s...

hash表的使用

事實上不管使用陣列還是鍊錶儲存資料都會存在較大缺陷,當你使用陣列時,難於刪除和新增資料 當你使用鍊錶時難於查詢資料 因此hash表綜合了兩者的優缺點,使的查詢和新增等操作既不至於複雜也不至於簡單。因此hash表的原理可以是陣列中存鍊錶,鍊錶上存資料 簡單的建立方式如下 public class hn...