資料結構 雜湊表

2021-10-22 06:45:31 字數 3669 閱讀 5658

鍵(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 雜湊函式 平方取中法 對關鍵碼平方後,按照雜湊表大小,取中間的若干位作為雜湊位址 平方後擷取 適用情況 實現...