本文參考了《資料結構與演算法分析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,直到出現雜湊值...
雜湊表的基本操作(一) 線性探測法解決雜湊衝突
雜湊概念 在之前學習過的順序搜尋和二叉樹搜尋中,元素儲存位置和元素各關鍵碼之間沒有對應關係,因此在查詢乙個元素時,必須要經過關鍵碼的多次比較。搜尋的效率取決於搜尋過程中元素的比較次數。我們希望可以不經過任何比較,一次直接從表中得到想要的元素,這樣一來,搜尋效率就有了質的提高。如果構造一種儲存結構,通...