js實現鍊錶

2022-07-31 22:39:18 字數 1242 閱讀 1823

平時我們使用最多的資料結構應該是陣列,很多東西都可以用陣列來輕鬆實現,但在某些程式語言中,陣列的長度是預先設定好的,想要額外新增元素或者刪除元素是一件比較困難的事。那麼使用鍊錶的話恰恰就解決了這些問題,對於鍊錶來說刪除或新增乙個元素是非常方便的,除了資料的隨機訪問(可以實現但是比較麻煩,比如可以通過新增和操作索引值來實現),它幾乎可以用在任何可以使用一維陣列的情況中。

鍊錶的定義

鍊錶是由一組節點組成的集合。每個節點都使用乙個物件的引用指向它的後繼。指向另一

個節點的引用叫做鏈。

一般的鍊錶都會額外新增乙個頭節點(作為輔助)和尾節點,例如下面這種樣子

陣列元素靠它們的位置進行引用,鍊錶元素則是靠相互之間的關係進行引用。在上圖中,我們說 bread 跟在 milk 後面,而不說 bread 是鍊錶中的第二個元素。遍歷鍊錶,就是跟著鏈結,從鍊錶的首元素一直走到尾元(但這不包含鍊錶的頭節點,頭節點常常用來作為鍊錶的接入點)。上圖中另外乙個值得注意的地方是,鍊錶的尾元素指向乙個 null 節點。

插入新元素:

向單向鍊錶中插入乙個節點,只需要修改它前面的節點(前驅),使其指向新加入的節點,而新加入的節點則指向原來前驅指向的節點。上圖演示了如何在 eggs 後加入 cookies。

刪除鍊錶中已有元素:

從鍊錶中刪除乙個元素也很簡單。只需要將待刪除元素的前驅節點指向待刪除元素的後繼節點。上圖展示了從單向鍊錶中刪除bacon。

除了插入和刪除,鍊錶還有其他一些操作,後面將給出講解。

設計乙個基於物件的鍊錶

我們需要設計兩個類,node 類用來表示節點, linkedlist 類提供插入節點、刪除節點、顯示列表元素的方法,以及其他一些輔助方法。

js 實現鍊錶

我們通常會在c 這類語言中學習到鍊錶的概念,但是在js中由於我們可以動態的擴充陣列,加之有豐富的原生api。我們通常並不需要實現鍊錶結構。由於突發奇想,我打算用js實現一下 首先我們要建立鍊錶 1 建立鍊錶 2function createlinknode data,pre,next 8this.n...

單向鍊錶JS實現

可以排序,增加,查詢,刪除的單向鍊錶 function linknode key,value function link link.prototype add function key,value var node new linknode key,value if this.count 0 thi...

使用js實現鍊錶

鍊錶是一種動態的資料結構,不同於陣列的是,鍊錶分配記憶體空間的靈活性,它不會像陣列一樣被分配一塊連續的記憶體。當你想在陣列的任意位置,插入乙個新值的時候,必須對陣列中的各個元素進行相應的位置移動才能達到目標,開銷顯然是很大的。然而鍊錶的靈活性在於它的每個元素節點分為兩部分,一部分是儲存元素本身,另一...