C 開雜湊雜湊表(雜湊桶)

2021-09-26 18:28:12 字數 1587 閱讀 9166

開雜湊概念

開雜湊法又叫鏈位址法(開鏈法),首先對關鍵碼集合用雜湊函式計算雜湊位址,具有相同位址的關鍵碼歸於同一子集合,每乙個子集合稱為乙個桶,各個桶中的元素通過乙個單鏈表連線起來,各鍊錶的頭結點儲存在雜湊表中。開雜湊中每個桶中放的都是發生雜湊衝突的元素。

節點定義

template

<

class

v>

struct hashnode

v _data;

hashnode

* _next;

};

迭代器

//迭代器

template

<

classk,

classv,

class

keyofvalue

,class

hfun

>

class

ha****erator

v&operator*(

) v*

operator

->()

bool

operator!=(

const self& it)

self&

operator++(

)++id;}if

(id == _phs-

>_hs.

size()

) _node =

nullptr;}

return

*this;}

private

: pnode _node;

htable* _phs;

};

雜湊表

template

<

classk,

classv,

class

keyofvalue

,class

hfun

>

class

hashtable

iterator begin()

} iterator end()

size_t hashid

(const k& key, size_t sz)

pairbool

>

insert

(const v& data)

; size_t getprime

(size_t sz)

;void

checkcapacity()

; pnode find

(const k& key)

;bool

erase

(const k& key)

;private

: vector _hs;

//指標陣列

size_t _size;

};

開雜湊與閉雜湊比較

應用鏈位址法處理溢位,需要增設鏈結指標,似乎增加了儲存開銷。事實上: 由於開位址法必須保持大量的空閒空間以確保搜尋效率,而表項所佔空間又比指標大的多,所以使用鏈位址法反而比開位址法節省儲存空間。

雜湊錶開雜湊雜湊桶實現

開雜湊法對關鍵碼集合用雜湊函式計算雜湊位址,具有相同位址的關鍵碼歸於同一子集合,每乙個子集合稱為乙個桶,各個桶中的元素通過乙個單鏈表鏈結起來,各鍊錶的頭結點組成 乙個向量,因此,向量的元素個數與可能的桶數一致。include using namespace std namespace openhas...

雜湊表(開雜湊)

hash table2.h pragma once include define hashmaxsize 1000 typedef int keytype typedef int valtype typedef size t hashfunc keytype key typedef struct h...

雜湊表 開雜湊

開雜湊很簡單。asl的計算忘了,找了兩道題都沒算對,這才是我不寫的真正原因 裡是裝13用的 include using namespace std 雜湊表 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把關 鍵碼值對映到表中乙...