雜湊表基礎以及用拉鍊法解決衝突問題

2021-10-02 04:04:48 字數 2709 閱讀 7354

雜湊表,是根據關鍵字值(key)直接進行訪問的資料結構,它通過把關鍵字對映到表中乙個位置(陣列下標)來直接訪問,以加快查詢關鍵值的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表

給定表m,存在函式f(key),存在函式f(key),對任意的關鍵字值key,待入函式後若能得到包含該關鍵字的表中位址,稱表m為雜湊表,函式f(key)為雜湊函式。

//雜湊表用來訪問

#include

#include

intmain()

; std::string str =

"abcdefgaaxxy"

;//統計字串中,各個字元的數量

for(

int i =

0; i < str.

length()

; i++

)for

(int i =

0; i <

128; i++)}

return0;

}//雜湊表用來排序

//時間複雜度o(表長+n),n為元素個數

//雜湊表排序長度,需要超過最大待排序的數字

#include

intmain()

;int hash_map[

1000]=

;for

(int i =

0; i <

10; i++

)for

(int i =

0; i <

1000

; i++)}

return0;

}

利用雜湊函式,將關鍵字(key)轉化為整數再對錶長取餘,從而關鍵字值轉化為雜湊表的表長範圍內的整數

拉鍊法解決衝突,構造雜湊表

將所有雜湊函式結果相同的結點連線在同乙個單鏈表中。

若選定的雜湊表長度為m,則可將雜湊表定義為乙個長度為m的指標陣列t[0-m-1],指標陣列中的每個指標指向雜湊函式結果相同的單鏈表

插入value:

將元素value插入雜湊表,若元素value的雜湊函式值為hash_key,將value對應的節點以頭插法的方式插入到以t[hash_key]為頭指標的單鏈表中。

查詢value:

若元素value的雜湊函式值為hash_key,遍歷以t[hash_key]為頭指標的單鏈表,查詢鍊錶各個節點的值域是否為value.

#include

#include

//雜湊錶即為普通的單鏈表構成

struct listnode };

//整數雜湊函式,直接取餘

inthash_func

(int key,

int table_len)

//將元素插入雜湊表

void

insert

(listnode* hash_table[

], listnode* node,

int table_len)

bool

search

(listnode* hash_table,

int value,

int table_len)

head = head-

>next;

}return

false;}

//table_len取為質數,衝突會比其他數字少

intmain()

; std::vector

> hash_node_vec;

int test[8]

=;for(

int i =

0; i <

8; i++

)for

(int i =

0; i < hash_node_vec.

size()

; i++

)printf_s

("hash table:\n");

for(

int i =

0; i < table_len; i++

)printf_s

("\n");

}printf_s

("\n");

printf_s

("test search:\n");

for(

int i =

0; i <

10; i++

)else

}return0;

}

結果如下:

雜湊map與stlmap

#include

#include

#include

struct listnode };

intmain()

std::map<:string>

int>

::iterator it;

for(it = hash_map.

begin()

; it != hash_map.

end(

); it++);

}return0;

}

雜湊表(拉鍊法)

開雜湊法又叫鏈位址法 開鏈法 開雜湊法 首先對關鍵碼集合用雜湊函式計算雜湊位址,具有相同位址的關鍵碼歸於同一子集合,每乙個子集合稱為乙個桶,各個 桶中的元素通過乙個單鏈表鏈結起來,各鍊錶的頭結點儲存在雜湊表中。設元素的關鍵碼為37,25,14,36,49,68,57,11,雜湊表為ht 12 表的大...

雜湊表查詢 拉鍊法

雜湊查詢 雜湊查詢 雜湊的第一步是使用雜湊函式將鍵對映成索引 1 除留取餘法 最常用的 特點是容易造成堆積,產生衝突 2 特徵值 3 字元型別的 在查詢中陣列的特點是定址容易,插入和刪除困難,鍊錶則相反 雜湊表將二者的特點綜合。雜湊表建表 通過某種關係轉換,使關鍵字適度的分散到制定大小的順序結構中,...

雜湊錶開雜湊法(拉鍊法)

開雜湊法又叫鏈位址法 開鏈法 設元素的關鍵碼為37,25,14,36,49,68,57,11,雜湊表為ht 12 表的大小為12,雜湊函式為hash x x 11 hash 37 4 hash 25 3 hash 14 3 hash 36 3 hash 49 5 hash 68 2 hash 57 ...