資料結構 雜湊表查詢演算法

2021-08-21 15:10:49 字數 1903 閱讀 9074

1、雜湊查詢也叫雜湊查詢,整個雜湊查詢過程大概分兩步

(1)在儲存時通過雜湊函式計算記錄的雜湊位址,並按此雜湊位址儲存該記錄。

(2)當查詢時,一樣通過雜湊函式計算記錄的雜湊位址,然後訪問雜湊位址的記錄。

雜湊函式的構造方法

(1)直接定址法

取關鍵字的某個線性函式值為雜湊位址

需要事先知道關鍵字的分布情況,適合查詢表較小且連續的情況。

(2)數字分析法

使用關鍵字的一部分來計算雜湊儲存的位置。

適合處理關鍵字位數較大的情況。

(3)平方取中法

假設關鍵字是1234,那它的平方就是1522756,再抽取中間的3位就是277

適合不知道關鍵字的分布,而位數又不是很大的情況。

(4)摺疊法

將關鍵字從左到右分割成位數相等的幾個部分,然後將這幾部分疊加求和,並按雜湊表表長,取後幾位作為雜湊位址。比如關鍵字是9876543210,雜湊表表長為三位,我們將它分成四組,987|654|321|0,然後將他們疊加求和等於1962,再求後三位得到雜湊位址962。

適合事先不知道關鍵字的分布,關鍵字位數叫多的情況。

(5)除留餘數法

此方法為最常用的構造雜湊函式的方法。

處理衝突雜湊的方法

(1)開放定址法

(2)再雜湊函式法

事先準備多幾個雜湊函式

這裡的(3)鏈位址法

將所有同關鍵字的記錄儲存在乙個單鏈表中,稱這種表為同義詞子表,在雜湊表中只儲存所有同義詞子表的頭指標。

2、雜湊表查詢演算法實現

(1)首先定義乙個雜湊表結構

(2)對雜湊表進行初始化

(3)對雜湊表進行插入操作

(4)根據不同的情況選擇雜湊函式和處理衝突的方法(這裡選用的是除留餘數法和開放定址法)

#include "stdio.h"    

#include "stdlib.h"

#define hashsize 10 // 定義雜湊表長度

#define nullkey -32768

typedef struct

hashtable;

int m = 0;

int init(hashtable *h)

return 1;

}int hash(int k)

void insert(hashtable *h, int k)

h->elem[addr] = k;

}int search(hashtable *h, int k)

return addr;

}void result(hashtable *h)//雜湊表元素顯示

printf("\n");

}void main()

; init(&h);

printf("輸入關鍵字集合:");

for (i = 0; i

result(&h);

printf("輸入需要查詢的元素:");

scanf_s("%d", &j);

addr = search(&h, j);

if (addr == -1)

printf("元素不存在\n");

else

printf("%d元素在表中的位置是:%d\n", j,addr);

}

資料結構 雜湊表查詢(雜湊表)

對於查詢,有順序表直接遍歷,有折半查詢直到查詢成功。但是這都需要不斷的比較,每一次查詢都需要重新遍歷,所以當資料龐大時是非常耗時的。雜湊表是一種可以避免多次比較,直接通過關鍵字就可以得到要查詢的記錄記憶體儲存位置。例如就像是乙個函式,每乙個自變數都對應著乙個函式值,即 這屬於雜湊技術,不需要比較就可...

資料結構 雜湊表(雜湊表)查詢

0 前言 順序表 乙個乙個挨個查詢 有序查詢 二分查詢方法 雜湊表查詢 記錄的儲存位置 f 關鍵字 雜湊技術是在記錄的儲存位置和他的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 查詢時,根據這個確定的對應關係找到固定值key的對映f key 若查詢集合中存在這個...

大話資料結構 雜湊表查詢(雜湊表)

雜湊技術 在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key f 雜湊函式 雜湊函式 採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續儲存空間稱為雜湊表或雜湊表。關鍵字對應的記錄儲存位置稱為雜湊位址。雜湊技術既是一種儲存方法,也是一種查詢方...