雜湊表(hash table,也叫雜湊表),是根據關鍵碼值(key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。它可以用o(1)的複雜度進行資料的插入刪除和查詢,但是 hash 表不保證表中資料的有序性,這樣在 hash 表中查詢最大資料或者最小資料的時間是 o(n) 。網上有很多關於怎麼對映和處理衝突,我覺得掌握以下兩種基本就可以了:
1.除留餘數法:
取關鍵字被某個不大於雜湊表表長m的數p除后所得的餘數為雜湊位址。即 h(key) = key mod p,p<=m。不僅可以對關鍵字直接取模,也可在摺疊、平方取中等運算之後取模。對p的選擇很重要,一般取素數或m,若p選的不好,容易產生同義詞。
當儲存結構是鍊錶時,多採用拉鍊法,用拉鍊法處理衝突的辦法是:把具有相同雜湊位址的關鍵字(同義詞)值放在同乙個單鏈表中,稱為同義詞鍊錶。有m個雜湊位址就有m個鍊錶,同時用指標陣列t[0..m-1]存放各個鍊錶的頭指標,凡是雜湊位址為i的記錄都以結點方式插入到以t[i]為指標的單鏈表中。t中各分量的初值應為空指標。
這個部落格寫的很好:還有一些高階演算法
#include#include#include#define hashsize 32
char *keywords = ;
char keybuf[hashsize][100];
bool flag[hashsize]; //標誌已經被占用的儲存單位
void clearflag() //清空標誌
int hash(char s)
if (count < hashsize) //如果count=hashsize說明所有的位置都有衝突
return -1;
}int main()
return 0;
}
資料結構 雜湊表
1.雜湊表的定義 元素的儲存位置和它的關鍵碼之間建立乙個確定的對應關係h,使得每個關鍵碼key和唯一的儲存位置h key 相對應。在查詢時,根據這個確定的對應關係找到給定值k的對映h k 若查詢集合中存在這個記錄,則必定在h k 的位置上,這種查詢技術稱為雜湊技術。採用雜湊技術將記錄儲存在一塊連續的...
資料結構 雜湊表
雜湊表的定義 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把 關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的 速度。這個對映函式叫做雜湊函式,存放 記錄的陣列叫做雜湊表。雜湊函式的析構方法 餘數法 取關鍵字被某個不大於雜...
資料結構 雜湊表
3 雜湊函式 數字分析法 根據關鍵碼在各個位上的分布情況,選取分布比較均勻的若干位組成雜湊位址。適用情況 能預先估計出全部關鍵碼的每一位上各種數字出現的頻度,不同的關鍵碼集合需要重新分析。4 雜湊函式 平方取中法 對關鍵碼平方後,按照雜湊表大小,取中間的若干位作為雜湊位址 平方後擷取 適用情況 實現...