資料結構與演算法學習三 字典 Hash表

2021-09-27 12:16:06 字數 1875 閱讀 4175

(1)字典的資料結構:其實就是類似物件 對。與物件一樣,key不能重複。

1.字典資料結構:

2.主要操作如下:

3.用js實現字典及其方法:

//用js實現字典及其方法

var dictionary = function();

//檢查key是否存在

this.has = function(key)

//新增元素

this.set = function(key, value)

//刪除元素

this.delete = function(key)

return false;

}//獲取鍵值

this.get = function(key)

return undefined;

}this.getitem = function()

}

1.hash表:對於將要儲存的物件---,通過雜湊函式(hash函式)計算 key 得到乙個number型別值,該值作為物件中 value 儲存在記憶體陣列 table 中的 對應下標。如下圖所示:

2.查詢

陣列中查詢資料:從頭迴圈 ==》資料量大時,複雜度太高。(儲存簡單、查詢困難)

hash表中查詢資料:

(1)將要查詢的key經hash函式計算 ==》得到儲存位置下標;

(2)直接到記憶體陣列對應下標處取值value即可。

3.用js實現hash表,**如下:

/****用js實現hash表****/

var hashtable = function()

(b)查詢:先經hash函式定位找到儲存位置,再進行迴圈鍊錶(線性查詢,對比key),獲取想要獲取的資料。

¥注意:一般hash表中只儲存value,不存key,如果hash值相同時,鍊錶中也只存value的話,查詢是雖然能定位到儲存位置,但從鍊錶中查詢時,不知該取哪個資料;所以在這種情況下,hash表中(鍊錶中)同時儲存 key和value 作為鍊錶中element的值;js實現**如下:

/****用js實現hash表---解決雜湊衝突的---分離鏈結發****/

var hashtable_link = function()時,計算key得到hash值,檢查該位置有無元素,沒有---存在該處;有值---位置 + 1 再檢查有值否;

(b)查詢:先經hash函式定位找到儲存位置,再進行線性迴圈查詢。

js實現**如下:

/****用js實現hash表---解決雜湊衝突的---線性探查法****/

var hashtable_linear = function(){

var table = ;

var loselosehashcode = function(key){

var hash = 0;

for(var i=0; i

Redis學習 1 基礎資料結構(三) 字典

下圖 1 7 為linked list在redis中的實現 節點 typedef struct dictentry v 鏈結下乙個節點形成鍊錶 struct dictentry next dictentry 雜湊表 typedef struct dictht dictht 對應型別資料操作函式 ty...

python學習筆記 三 字典

字典是一種對映型別的資料型別。辣麼什麼是對映呢?如果看過 資料結構與演算法 這一本書的小夥伴應該有印象 我也只是大學學習過,嘻嘻 對映 就是將兩個集合一 一對應起來,通過集合a的值,集合b有且只有乙個與之對應。字典是python中唯一的內建對映型別。字典以類似於下面的方式表示 phonebook 字...

Redis學習筆記(三) 字典

redis的字典使用雜湊表作為底層實現,乙個雜湊表中可以有多個雜湊表節點,而每個雜湊節點就儲存在字典中的乙個鍵值對。redis字典所用的雜湊表由disht結構定義。typedef struct dictht table 屬性是乙個陣列,陣列中的每個元素都是乙個指向dictentry結構的指標,每個d...