(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...