資料結構與演算法 單向鍊錶 js實現

2021-08-28 01:42:25 字數 2163 閱讀 3063

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

鍊錶的定義

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

個節點的引用叫做鏈。

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

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

插入新元素:

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

刪除鍊錶中已有元素:

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

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

設計乙個基於物件的鍊錶

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

node類:  

function node(element)
linkedlist 類:

function llist()   

llist.prototype=

return currnode;

},

//向某一元素後面插入新節點

insert:function(newelement,item),

//查詢某一節點的前乙個節點(前驅)

findprevious:function(item)

return currnode;

},

//刪除某乙個節點

remove:function(item)

}, //修改某一節點的資料

edit:function(item,newitem),

//在控制台列印出所有節點(為了方便預覽)

display:function()

} }

測試:

var names = new llist();

names.insert("likek", "head");//往頭節點後插入節點likek

names.insert("zhangsan", "likek");//往likek後插入節點zhangsan

names.insert("lisi", "zhangsan");//往zhangsan後插入節點lisi

names.insert("wangwu", "lisi");//往lisi後插入節點wangwu

names.display();

/*likek

zhangsan

lisi

wangwu*/

names.remove("zhangsan");//刪除zhangsan節點

names.display();

/*likek

lisi

wangwu*/

names.edit("lisi","wangnima");//將lisi節點改為wangnima

names.display();

/*likek

wangnima

wangwu*/

php實現資料結構 單向鍊錶

什麼是單向鍊錶 鍊錶是以鏈式儲存資料的結構,其不需要連續的儲存空間,鍊錶中的資料以節點來表示,每個節點由元素 儲存資料 和指標 指向後繼節點 組成。單向鍊錶 也叫單鏈表 是鍊錶中最簡單的一種形式,每個節點只包含乙個元素和乙個指標。它有乙個表頭,並且除了最後乙個節點外,所有節點都有其後繼節點。它的儲存...

資料結構 單向鍊錶(java實現)

public class node 為節點追加節點 當前節點 node currentnode this while true 賦值當前節點 currentnode nextnode 把需要追回的節點追加為找到的節點的下乙個節點 currentnode.next node return this 刪...

資料結構 單向鍊錶的實現

單向鍊錶的實現 記錄 非常菜雞的開始 節點中定義節點時 成員變數要寫struct 因為沒寫報了一堆錯 老師節點裡的node都是變數型別,只有linknode內部是指標型別,內部使用指標,指標大小為4個位元組 可以分配記憶體很方便。注意teacher輸入的時候為位址 各種指標型別的轉換 main函式中...