雜湊表,是根據關鍵字值(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 ...