《C 實現資料結構》 雜湊表

2021-07-29 08:58:29 字數 1873 閱讀 9871

雜湊表通過將關鍵字值對映到表中某個位置上來儲存元素。由給定的關鍵字值,根據對映,計算得到元素的儲存位置來訪問元素。

在雜湊技術中,衝突是指對於關鍵字集合中的兩個關鍵字值ki和kj,當ki != kj時,有h(ki)==h(kj),h是雜湊函式。

目前比較常用的雜湊函式有:除留餘數法、平方取中法、摺疊法、數字分析法。

乙個雜湊表中衝突是難以避免的,所以要尋求解決衝突的方法。拉鍊法和開位址法是兩種常用的方法。拉鍊的方法也稱開雜湊法,開位址法又稱閉雜湊法。

拉鍊法就是為每個雜湊位址建立乙個單鏈表,表中儲存所有具有該雜湊值的元素。

開位址法是在衝突發生時,通過一種策略來探查下乙個空位置,比如有線性探查法、偽隨機探查法、二次探查法和雙雜湊法。

下面**用的是拉鍊法。

//

// created by huxijie on 17-3-22.

// 雜湊表

#include

using

namespace

std;

template

struct node;

//用拉鍊法解決衝突的雜湊錶類

template

class hashtable;

template

hashtable::hashtable(const

int size):capacity(size)

}template

hashtable::~hashtable()

}}template

int hashtable::hash(const t &x)

template

bool hashtable::i***isted(const t &x)

if (q != null) else

}template

bool hashtable::insert(const t x)

if (q != null) else

}template

bool hashtable::remove(const t x)

if (q != null) else

}template

void hashtable::show()

cout

《測試用例:

int main() ;

for (int i = 0; i < n; ++i)

hashtable.show();

hashtable.remove(36);

cout

<<"after removing 36........"

0;}

執行結果:

index

0:index

1:index

2:24

index

3:80

5836

index

4:index

5:index

6:index

7:40

index

8:index

9:index

10:65

after removing 36........

index

0:index

1:index

2:24

index

3:80

58index

4:index

5:index

6:index

7:40

index

8:index

9:index

10:65

process finished with

exit code 0

c 資料結構 雜湊表

雜湊表 雜湊表 hashtable 又叫雜湊表,是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。雜湊表的做法其實很簡單,就是把key通過乙個固定的演算法函式既所...

資料結構 雜湊表 c

理想的查詢是不經過任何的比較,一次訪問就能得到想要查詢的記錄 要達到這樣的目的就需要在記錄的儲存位置和它的關鍵字之間建立乙個確定的關係f 讓每個關鍵字和結構中的乙個唯一的位址相對應。在查詢的時候,只需要對應關係f找到給定值k的像f k 若結構中存在關鍵字和k相等,則必定在f k 的儲存位置上,由此不...

資料結構 雜湊表

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