探測法的雜湊表的C 實現 最新修改

2021-07-03 19:50:54 字數 1382 閱讀 9246

本文參考了《資料結構與演算法分析c++描述(第3版)》[美] mark weiss 著  張懷勇 等譯  劉田   審校

使用二次探測法。

#include "stdafx.h"

#include#includeusing namespace std;

#define empty 0

#define exist 1

#define deleted 2

template class hashtable

int hash(t x)

public:

hashtable(int s = 11)//建構函式,預設初始鍵數為11

}~hashtable()

void makempty()

bool isactive(int key)

int findpos(t x)//查詢乙個元素的路徑,這裡使用平方探測的方法

else if (type_state == exist)

}else if (type_state == deleted)

}}

return index;

} int findpos_for_insert(t x)//插入的時候遇到empty或deleted都可以插入

else if (type_state == exist)

else if (type_state == deleted)

} return index;

} bool contain(t x)//查詢x是否存在於雜湊表中

bool insert(t x)//插入乙個元素

int p = findpos_for_insert(x);

datatable.at(p) = x;

typetable.at(p) = exist;

realsize++;

if(realsize >= datatable.size()/2)

rehash();

return true;

} bool remove(t x)//刪除乙個元素

void print()

cout << endl;

} void rehash()//再雜湊

realsize = 0;

for(int j = 0;j < olddatatable.size();j++)

} };

int _tmain(int argc, _tchar* argv)

部分執行結果截圖:

C語言 生成雜湊表 線性探測法

直接定址法 數字分析法 平方取中法 除留餘數法 隨機數法 開放定址法 線性探測法,二次探測法,隨機探測法 再雜湊函式法 鏈位址法 拉鍊法,雜湊桶 公共溢位區法 宣告定義 include include include define field 1 define null 32768 typedef ...

基於線性探測法的雜湊表 並行陣列

為了解決雜湊表中的碰撞衝突問題,除了基於拉鍊法的方式,我們還可以採用基於線性探測法並行陣列的方式解決。基本思想 當碰撞發生時 當乙個鍵的雜湊值已經被另乙個鍵所占用 我們就檢查雜湊表中的下乙個位置 將索引值 1 若為空,則將此雜湊值賦給發生碰撞的鍵。若不為空,則不斷將雜湊表中的位置 1,直到出現雜湊值...

雜湊表的基本操作(一) 線性探測法解決雜湊衝突

雜湊概念 在之前學習過的順序搜尋和二叉樹搜尋中,元素儲存位置和元素各關鍵碼之間沒有對應關係,因此在查詢乙個元素時,必須要經過關鍵碼的多次比較。搜尋的效率取決於搜尋過程中元素的比較次數。我們希望可以不經過任何比較,一次直接從表中得到想要的元素,這樣一來,搜尋效率就有了質的提高。如果構造一種儲存結構,通...