資料結構之雜湊表的實現

2022-07-13 02:54:09 字數 1177 閱讀 7178

之前研究stl原始碼的時候發現雜湊table底層是實現看起來實現的非常的簡潔,覺得自己去寫乙個雜湊表肯定也是很簡單的。但是,但是,但是我今天看了一下資料結構裡面的雜湊表的簡單實現,才發現其實也是有很多學問在裡面的,所以今天就打算自己實現一下,做乙個記錄,方便以後自己來檢視學習。

因為雜湊表是會產生雜湊衝突的嘛,一般的解決方法都是採用開鏈法,所以今天就簡單的實現乙個開鏈法的具體步驟。

具體步驟先是寫乙個簡單的模板類的框架

#include #include 

#include

#include

using

namespace

std;

template

class

hashtable;

int hash (const

string &x);

int hash (int key);

這個框架還是比較通俗的,但是由於編輯工具不是很好用(linux下面的編輯工具有點bug,老是閃退,我就麼有建工程,將就看吧)。主要就是實現了一下插入,刪除,包含核雜湊函式的構造這幾個簡單的方法。下面是這幾個函式的具體實現**。

void

rehash()

int myhash (const obeject & a) const

void

makeempty()

bool insert(const object &x)

bool remove(const object &x)

bool constains(const object & x)const

這個就是實現簡單的帶有鍊錶和vector的雜湊表了,這個比較常見。

當然還有不使用鍊錶的雜湊表。這樣的鍊錶的解決衝突的方式有許多種線性探測,根據鍵值,呼叫雜湊函式找到對應的鍵值,如果該位置已經滿了,就依次向後移動乙個位置,知道找到末尾還是滿了,就從頭部開始向後找起,直到找到乙個空的可以插入的位置。

平方探測,這個和上面類似,但是它每次移動的位置是當前移動次數的平方倍數。這個隨機性比較大。

關於這一類的雜湊表的實現我自己感覺應該是比上面的那種簡單些,實現方式大多是類似的。最主要的還是去檢測當前位置是否滿,然後移動的規則的一些演算法。

stl中的雜湊表還有一些其他型別的。比如hash_set,hash_map;感興趣可以去看些stl原始碼。

資料結構之雜湊表(雜湊表)

今天學的是資料結構的雜湊查詢篇,其他的查詢可參見以前的傳送門 以前的查詢都是基於比較關鍵字的基礎上,所以查詢的效率依賴於查詢過程中所進行的比較次數。理想的情況是不經過任何比較,通過計算就能直接得到記錄所在的儲存位址,雜湊查詢 hashed search 是基於上述思想的一種查詢方式。雜湊法又稱為雜湊...

資料結構之雜湊表的java實現

雜湊表是一種資料結構,提供快速的插入和查詢功能。雜湊表基於陣列儲存資料,因此能在o 1 時間內定位資料。關鍵字值通過雜湊函式對映為陣列下標。缺點就是陣列建立後容量固定,如果資料較多需要不斷擴充套件其長度。如何將關鍵字轉換為陣列下標?這個操作是通過雜湊函式完成的。比如,下面就是乙個簡單的雜湊函式,in...

資料結構之雜湊表

雜湊表和雜湊化有乙個重要的概念是如何把關鍵字轉換成陣列下標,在雜湊表中這個轉換是通過雜湊函式來完成的。比如規定乙個單詞含有4個字元,對於單詞cats,我們採用 冪的連乘 的方式將乙個單詞對映成數字。因為有27個可能的字元,包括空格,所以冪採用27,則cats的數字下標是3 27 3 1 27 2 2...