鍵(key): 組員的編號 如, 1 、 5 、 19 。 。 。雜湊表的主要思想就是,將資料進行分組,然後通過雜湊函式找到該資料在哪個組,進行快速的查詢。值(value): 組員的其它資訊(包含性別、年齡和戰鬥力等)
索引: 陣列的下標(0,1,2,3,4) ,用以快速定位和檢索資料
雜湊桶: 儲存索引的陣列(鍊錶或陣列),陣列成員為每乙個索引值相同的多個元素
雜湊函式: 將組員編號對映到索引上,採用求餘法 ,如: 組員編號 1
先定義節點,
之後再定義雜湊表,裡面存在分組的數量,
和乙個指向每個組的首位址的鏈條
typedef
struct link_node link;
typedef link* list;
typedef link* element;
typedef
struct hash_list hash;
先給雜湊表分配乙個記憶體空間,再給附上大小
之後給鏈條分配記憶體空間,再給每個鏈條節點分配空間
hash*
init
(int tablesize)
hash-
>tablesize = tablesize;
hash-
>thelists =
(list*
)malloc
(sizeof
(list)
* tablesize);if
(!(hash-
>thelists)
)for
(i =
0;i < tablesize;i++
)memset
(hash-
>thelists[i],0
,sizeof
(link));
//將節點賦值為0
}return hash;
}
通過鍵值取餘得到在哪個分組中。
int
hashf
(int key, hash* hash)
插入和查詢:
查詢:先通過雜湊函式判斷在哪個分組中,之後再在分組中查詢。
插入:先通過雜湊函式判斷在哪個分組中,之後再判斷是否已經有該關鍵字的節點,如果沒有將其插入該分組的第乙個,因為頭節點不插入元素,所以在l->next後面插入。
element find
(hash* hash,
int key)
return e;
}void
insert
(hash* hash,
int key,
void
* data)
int i =
hashf
(key,hash)
; element e =
find
(hash, key);if
(e)else
}
先找到在哪個組,在組裡找是否有該節點。
void
delete
(hash* hash,
int key)
if(tmp)
}
void
destory
(hash* hash)
free
(l);
}free
(hash-
>thelists)
;free
(hash)
;}
全部**:
#include
#include
#include
using
namespace std;
typedef
struct link_node link;
typedef link* list;
typedef link* element;
typedef
struct hash_list hash;
hash*
init
(int tablesize)
;void
insert
(hash *hash,
int key,
void
*data)
;element find
(hash *hash,
int key)
;int
hashf
(int key, hash* hash)
;void
delete
(hash* hash,
int key)
;void
destory
(hash *hash)
;int
main()
else
}destory
(hash)
;system
("pause");
return0;
}int
hashf
(int key, hash* hash)
element find
(hash* hash,
int key)
return e;
}void
destory
(hash* hash)
free
(l);
}free
(hash-
>thelists)
;free
(hash);}
void
insert
(hash* hash,
int key,
void
* data)
int i =
hashf
(key,hash)
; element e =
find
(hash, key);if
(e)else
}hash*
init
(int tablesize)
hash-
>tablesize = tablesize;
hash-
>thelists =
(list*
)malloc
(sizeof
(list)
* tablesize);if
(!(hash-
>thelists)
)for
(i =
0;i < tablesize;i++
)memset
(hash-
>thelists[i],0
,sizeof
(link));
}return hash;
}void
delete
(hash* hash,
int key)
if(tmp)
}
資料結構 雜湊表
1.雜湊表的定義 元素的儲存位置和它的關鍵碼之間建立乙個確定的對應關係h,使得每個關鍵碼key和唯一的儲存位置h key 相對應。在查詢時,根據這個確定的對應關係找到給定值k的對映h k 若查詢集合中存在這個記錄,則必定在h k 的位置上,這種查詢技術稱為雜湊技術。採用雜湊技術將記錄儲存在一塊連續的...
資料結構 雜湊表
雜湊表的定義 雜湊表 hash table,也叫雜湊表 是根據關鍵碼值 key value 而直接進行訪問的資料結構。也就是說,它通過把 關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的 速度。這個對映函式叫做雜湊函式,存放 記錄的陣列叫做雜湊表。雜湊函式的析構方法 餘數法 取關鍵字被某個不大於雜...
資料結構 雜湊表
3 雜湊函式 數字分析法 根據關鍵碼在各個位上的分布情況,選取分布比較均勻的若干位組成雜湊位址。適用情況 能預先估計出全部關鍵碼的每一位上各種數字出現的頻度,不同的關鍵碼集合需要重新分析。4 雜湊函式 平方取中法 對關鍵碼平方後,按照雜湊表大小,取中間的若干位作為雜湊位址 平方後擷取 適用情況 實現...