資料結構 雜湊表

2021-06-27 11:21:52 字數 2447 閱讀 8280

雜湊表的定義:

雜湊表(hash table,也叫雜湊表),是根據關鍵碼值(key value)而直接進行訪問的資料結構。也就是說,它通過把

關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的

速度。這個對映函式叫做雜湊函式,存放

記錄的陣列叫做雜湊表。

雜湊函式的析構方法

餘數法:取關鍵字被某個不大於雜湊表表長m的數p除后所得的餘數為雜湊位址。即 h(key) = key mod p,p=m。不僅可以對關鍵字直接取模,也可在摺疊、平方取中等運算之後取模。對p的選擇很重要,一般取素數或m,若p選的不好,容易產生同義詞。

直接定址法

取關鍵字或關鍵字的某個

線性函式

值為雜湊位址。即h(key)=key或h(key) = a·key b,其中a和b為常數(這種雜湊函式叫做自身函式)。若其中h(key)中已經有值了,就往下乙個找,直到h(key)中沒有值了,就放進去。

平方取中法:

取關鍵字平方後的中間幾位作為雜湊位址。

摺疊法將關鍵字分割成位數相同的幾部分,最後一部分位數可以不同,然後取這幾部分的疊加和(去除進製)作為雜湊位址。數字疊加可以有移位疊加和間界疊加兩種方法。移位疊加是將分割後的每一部分的最低位對齊,然後相加;間界疊加是從一端向另一端沿分割界來回摺疊,然後對齊相加。

把關鍵字變換為整數等

處理衝突的方法

1. 開放定址法:hi=(h(key) di) mod m,i=1,2,…,k(k=m-1),其中h(key)為雜湊函式,m為雜湊表長,di為增量序列,可有下列三種取法:

1.1. di=1,2,3,…,m-1,稱線性探測再雜湊;

1.2. di=1^2,-1^2,2^2,-2^2,⑶^2,…,±(k)^2,(k=m/2)稱二次探測再雜湊;

1.3. di=偽隨機數序列,稱偽隨機探測再雜湊。

2. 再雜湊法:hi=rhi(key),i=1,2,…,k rhi均是不同的雜湊函式,即在同義詞產生位址衝突時計算另乙個雜湊函式位址,直到衝突不再發生,這種方法不易產生「聚集」,但增加了計算時間。

3. 鏈位址法(拉鍊法)

4. 建立乙個公共溢位區

下面我來建立乙個雜湊表

#include#include#includetypedef struct       //元素型別定義

datatype;

typedef struct //雜湊表型別

hashtable;

void createhashtable(hashtable *h, int m, int p, int hash, int n);

void displayhash(hashtable *h, int m);

int searchhash(hashtable *h, int k);

int main()

; int m = 11, p = 11, n = 8, pos;

//m代表長度 p<=m為除數,n代表元素個數

int k;

hashtable h;

createhashtable(&h, m, p, hash, n);

displayhash(&h, m);

k = 123;

pos = searchhash(&h, k);

printf("關鍵字%d在雜湊表中的位置為:%d\n", k, pos);

system("pause");

return 0;

}void createhashtable(hashtable *h, int m, int p, int hash, int n)//m為雜湊表長度

for (i = 0; i < n; i++)//求雜湊函式的位址並處理衝突

else//用線性探測再雜湊法處理衝突

while ((*h).data[di].key!=-1);

(*h).data[di].key = hash[i];

(*h).data[di].hi = sum + 1;

} (*h).tablesize = m;//雜湊表的長度

(*h).cursize = n; }}

void displayhash(hashtable *h, int m)//顯示雜湊表

printf("\n");

printf("關鍵字key的值:");

for (i = 0; i < m; i++)

printf("\n");

printf("衝突的次數");

printf(" ");

for (i = 0; i < m; i++)

printf("\n");

}int searchhash(hashtable *h, int k)//在雜湊表中查詢關鍵字k的位置

資料結構 雜湊表

1.雜湊表的定義 元素的儲存位置和它的關鍵碼之間建立乙個確定的對應關係h,使得每個關鍵碼key和唯一的儲存位置h key 相對應。在查詢時,根據這個確定的對應關係找到給定值k的對映h k 若查詢集合中存在這個記錄,則必定在h k 的位置上,這種查詢技術稱為雜湊技術。採用雜湊技術將記錄儲存在一塊連續的...

資料結構 雜湊表

3 雜湊函式 數字分析法 根據關鍵碼在各個位上的分布情況,選取分布比較均勻的若干位組成雜湊位址。適用情況 能預先估計出全部關鍵碼的每一位上各種數字出現的頻度,不同的關鍵碼集合需要重新分析。4 雜湊函式 平方取中法 對關鍵碼平方後,按照雜湊表大小,取中間的若干位作為雜湊位址 平方後擷取 適用情況 實現...

資料結構 雜湊表

雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 我們把這種對應關係f稱為雜湊函式,又稱為雜湊 hash 函式。雜湊表 雜湊表 即採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這個空間即為雜湊表。關鍵字對應的記錄儲存位置為雜湊位址。原...