最近在 leetcode 刷題時發現需要用到鍊錶,但是 js 中沒有鍊錶這種資料型別,故自己實現乙個簡單的單鏈表。
先科普一下鍊錶:
鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點(鍊錶中每乙個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。 使用鍊錶結構可以克服陣列鍊錶需要預先知道資料大小的缺點,鍊錶結構可以充分利用計算機記憶體空間,實現靈活的記憶體動態管理。但是鍊錶失去了陣列隨機讀取的優點,同時鍊錶由於增加了結點的指標域,空間開銷比較大。鍊錶最明顯的好處就是,常規陣列排列關聯專案的方式可能不同於這些資料專案在記憶體或磁碟上順序,資料的訪問往往要在不同的排列順序中轉換。鍊錶允許插入和移除表上任意位置上的節點,但是不允許隨機訪問。總結一下:陣列查詢快增刪慢(插入元素時需要移動其他元素),鍊錶查詢慢(需要從頭開始遍歷)增刪快。
鍊錶實現類:
// 節點類
function
node
(val)
// 鍊錶類
function
nodelist()
function
push
(val)
else
// 最後乙個節點後面追加節點
current.next = node
}this
.length++
}function
insertafter
(val, newval)
function
find
(val)
// 判斷最後乙個節點
if(current.val === val)
return current
return
null
}function
findprev
(val)
return
null
}function
remove
(val)
else
}this
.length--
}function
update
(val, newval)
function
tostring()
) $$`
current = current.next
index++
} console.
log(str)
}
測試**:
let nodelist =
newnodelist()
nodelist.
push
('1st element'
)nodelist.
push
('2nd element'
)nodelist.
push
('3rd element'
)nodelist.
push
('4th element'
)console.
log(
'find'
, nodelist.
find
('1st element'))
console.
log(
'find'
, nodelist.
find
('2nd element'))
console.
log(
'find'
, nodelist.
find
('3rd element'))
console.
log(
'find'
, nodelist.
find
('4th element'))
console.
log(
'findprev'
, nodelist.
findprev
('1st element'))
console.
log(
'findprev'
, nodelist.
findprev
('2nd element'))
console.
log(
'findprev'
, nodelist.
findprev
('3rd element'))
console.
log(
'findprev'
, nodelist.
findprev
('4th element'))
nodelist.
remove
('4th element'
)console.
log(
'length'
, nodelist.length,
'nodelist'
, nodelist)
nodelist.
insertafter
('2nd element'
,'2nd element 2'
)console.
log(
'length'
, nodelist.length,
'nodelist'
, nodelist)
nodelist.
update
('2nd element'
,'2nd element update'
)console.
log(
'length'
, nodelist.length,
'nodelist'
, nodelist)
nodelist.
tostring
()
**詳情請戳 ===> nodelist js實現資料結構 單鏈表
單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。每個元素由乙個儲存元素本身的節點和乙個指向下乙個元素的引用 也稱指標或鏈結 組成。下圖展示了乙個單鏈表的結構圖 每個元素除了由元素本身的節點還有指向下乙個元素的指標構成 從鍊錶中新增或者刪除元素不需要移動其他的元素 訪問...
單鏈表實現
單鏈表 1 邏輯上連續,位置上可以不連續的儲存方式。2 單鏈表由無數個結點組成,每個結點由資料段和指標域組成,資料段儲存資料,指標域儲存後繼的位址。3 每個結點最多有乙個前繼和乙個後繼。4 其中第乙個結點沒有前繼,所以我們通常建立乙個頭結點來儲存他的位置,其中頭結點的資料段我們不關注。5 最後乙個結...
單鏈表實現
include include define max 50 struct lnode 求鍊錶的長度 不包含頭結點 int length struct lnode node return i 初始化頭 int inithead struct lnode p struct lnode insert st...