在軟體開發中,不可不免的會使用到hash表,hash表的優點這裡就不說了,以下介紹乙個hash表的c實現,
uthash是用巨集實現的,使用的時候非常方便,只用包含uthash.h即可。
uthash的三個資料結構:
typedef structut_hash_bucket作用提供根據hash進行索引。ut_hash_bucket ut_hash_bucket;
typedef structut_hash_table可以看做hash表的表頭。ut_hash_table ut_hash_table;
typedef structut_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...