實驗九 雜湊表的查詢操作

2021-08-15 03:17:44 字數 2700 閱讀 3417

zzu的學弟學妹們不要抄作業哦~(`д´)

一、實驗目的

1.掌握雜湊表、雜湊函式與雜湊衝突的概念。

2.掌握雜湊表的構造方法及其計算機的表示與實現。

3.掌握雜湊表查詢演算法的實現。

二、實驗內容

1.以開放位址法中的線性探測再雜湊法處理衝突,實現雜湊表的建立、查詢和插入操作。

2.以鏈位址法,也叫拉鍊法處理衝突,實現雜湊表的建立,查詢和插入操作。

三、實驗要求

1.以開放位址法中的線性探測再雜湊法處理衝突,實現雜湊表的建立查詢和插入操作。

(1)設雜湊表長為20,用除留餘數法構造乙個雜湊函式。

(2)輸入雜湊表中記錄的個數n(n<=20)和各記錄的關鍵字值,然後以開放位址法中的線性探測再雜湊法作為解決衝突的方法,建立乙個開放位址雜湊表,並輸出已經建立的雜湊表。

(3)輸入乙個待查詢記錄的關鍵字key,完成開放位址雜湊表的查詢操作,如果查詢成功,則函式返回查詢到的記錄在雜湊表中的位置值,否則給出查詢失敗的提示資訊。

2.以鏈位址法,也叫拉鍊法處理衝突,實現雜湊表的建立,查詢和插入操作。

(1)設雜湊表長為13,用除留餘數法構造乙個雜湊函式。

(2)輸入雜湊表中記錄的個數12和各記錄的關鍵字序列(19,14,23, 01,68,20,84,27,55,11,10,79),然後以鏈位址法或叫拉鍊法作為解決衝突的方法,建立乙個鏈位址雜湊表,並輸出已經建立的雜湊表。

(3)輸入乙個待查詢記錄的關鍵字key,完成鏈位址雜湊表的查詢操作,如果查詢成功,則函式返回查詢到的記錄在雜湊表中的位置值,否則給出查詢失敗的提示資訊。

四、詳細程式清單

//1.雜湊表_線性探測再雜湊 

#include#include#define hashsize 20//定義雜湊表長

#define m 19 //定義除留餘數法中的質因數

#define success 1//查詢成功

#define unsuccess 0//查詢失敗

#define duplicate -1//表中已有與e有相同關鍵字的元素

typedef int keytype;

typedef struct elemtype;

typedef struct hashtable;

int p;//雜湊位址

int hash(int k)//雜湊函式

int searchhash(hashtable h,keytype k)//查詢

int inserthash(hashtable &h,elemtype e)//插入

void createhashtable(hashtable &h,int n)//建立雜湊表

} }void show(hashtable h,int n)//輸出雜湊表

hnode,*hlink;//鍊錶中的結點型別

hlink head[hashsize]; //靜態陣列,定義雜湊表型別

int p;//雜湊位址

int hash(int k)//雜湊函式

void inserthashlink(keytype e)//插入

else }

void createhashlink(int n)建立雜湊表,頭插法

}void show()//輸出雜湊表

printf("null\n");

} }void searchhashlink(keytype k)//查詢

t=t->next;

} }printf("查詢失敗\n");

}int main()

printf("輸入關鍵字個數:");

scanf("%d",&n);

createhashlink(n);

printf("雜湊鍊錶為:\n");

show();

while(1)

}

五、程式執行結果1.雜湊表_線性探測再雜湊

2.雜湊表_鏈位址法

六、實驗心得體會

1.用除留餘數法構造雜湊函式不是乙個好方法,衝突次數太多。書上寫的如果衝突次數大於表長一半就要重建雜湊表(我沒寫這個)。

2.用線性探測再雜湊法解決衝突也不是乙個很好的方法,比較次數有可能很多,在查詢時會增加麻煩。

3.鏈位址法有點像鄰接表,建立表我是用的單鏈表的頭插法。

4.剛開始學《資料結構》的時候,覺得裡面寫的都是偽**,後來逐漸覺得這就是c語言**,比如開始不能理解為什麼函式返回ok、unsuccess之類的而不是返回0、1數值?為什麼要先typedef int keytype;再 keytype key;而不是直接int key;?後來我才逐漸理解、認可這種可讀性高的寫法並且學習,這次就是使用的這種寫法。這也許就是**風格的提公升吧。

5.我感覺我輸出的雜湊表還是挺直觀、好看的。

查詢 雜湊表查詢(雜湊表)

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

雜湊表(雜湊表)查詢

雜湊技術是在記錄的儲存位置和它的關鍵字之間建立起乙個確定的對應關係f,使每個關鍵字key對應乙個儲存位置f key f為雜湊函式,又稱雜湊函式。採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續的儲存空間成為雜湊表 雜湊表。直接用key值的某個線性函式當位址。f key a key b 簡單,不...

雜湊表 雜湊表 查詢

直接定址法 數字分析法 平方取中法 平方取中法是將關鍵字平方之後取中間若干位數字作為雜湊位址。摺疊法摺疊法是將關鍵字從左到右分割成位數相等的幾部分,然後將這幾部分疊加求和,並按雜湊表表長取後幾體作為雜湊位址。除留餘數法 隨機數法 選擇乙個隨機數,取關鍵字的隨機函式值為它的雜湊位址。即 f key r...