近期刷leetcode發現凡是找字串中反覆字元或者陣列中找反覆資料的時候就不知道從何下手了。
所以決定學習一下雜湊表解題。雜湊表的原理主要是解決分類問題,hash表是介於鍊錶和二叉樹之間的一種中間結構。
鍊錶使用十分方便,可是資料查詢十分麻煩;二叉樹中的資料嚴格有序,可是這是以多乙個指標作為代價的結果。hash表既滿足了資料的查詢方便,同一時候不占用太多的內容空間。使用也十分方便。
定義hash資料結構,我採用的解決衝突的方法是分離鏈結法。
//單鏈表結構
typedef
struct listnode* position;
typedef
struct listnode* list;
struct listnode;
//hash表結構
typedef
struct hashtbl* hashtable;
struct hashtbl ;
雜湊雜湊函式index = key%tablesize
index hashfunc(const elementtype key,int tablesize)
建立hash表,並初始化
hashtable initializehashtable(int tablesize)
return h;
}
刪除hash表
void deletehashtable(hashtable h)
}free(h->thelists);
free(h);
}
往hash表中插入新元素
position
find(elementtype key,hashtable h)
void
insert(elementtype key,hashtable h)
}
列印hash表中全部的元素
void printhashtable(hashtable h)
printf("\n"); }}
測試main函式
int main()
; hashtable h;
h = initializehashtable(10);
int i = 0;
for(i=0;i
<10;i++)
printhashtable(h);
deletehashtable(h);
}
標頭檔案
#include
#include
#include
typedef
int elementtype;
typedef
unsigned
int index;
測試結果。能夠看到中雜湊後在hash表中一樣位置的都儲存下來了,形成乙個鍊錶如資料75 5 45;可是同樣的資料僅僅儲存乙份,比方3和3,75和75
hash table 雜湊表(雜湊表)
hash table 也叫雜湊表。涉及到雜湊函式 雜湊衝突處理的問題。雜湊函式是雜湊表的關鍵,是用來從值到雜湊表索引 存放位置 的對映。比如 要存放乙個學校學生的姓名,他們是amanda,jack,andy,tom,bob,black等等500個人。我們可以設計乙個雜湊表,容量為500,來存放這些學...
HashTable 雜湊表(雜湊表)
雜湊表 雜湊表 是根據關鍵字 key 而訪問在記憶體位置的資料結構。其方法是 它通過乙個關鍵值的函式將所需的資料對映到表中的位置來訪問資料,這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表 雜湊表 構造雜湊表的幾種方法 直接定址法 取關鍵字的某個線性函式為雜湊位址,hash key key 或 h...
HashTable雜湊表 雜湊表(雜湊桶)
處理雜湊衝突的開鏈法 拉鍊法 雜湊桶 使用素數做雜湊表的長度,可以降低雜湊衝突 素數表size t getnextprime size t num 素數表 雜湊桶的節點的定義 template struct hashnode 在插入前檢查容量,以及負載因子。不夠就進行增容,按素數表進行增,以減小雜湊...