我們通常會在c++這類語言中學習到鍊錶的概念,但是在js中由於我們可以動態的擴充陣列,加之有豐富的原生api。我們通常並不需要實現鍊錶結構。由於突發奇想,我打算用js實現一下:
首先我們要建立鍊錶:
1鍊錶最基本的要包括資料部分(data)、指向前乙個的指標(prenode)、指向後乙個的指標(nextnode)。//建立鍊錶
2function
createlinknode(data, pre, next)
8this.nextnode =next;
9 }
為了便於觀察結果,我們再寫乙個列印鍊錶的函式,掛在原型上:
1列印的函式由某乙個節點呼叫,遞迴呼叫,拼裝從此之後的所有節點的資料部分。//從模乙個節點開始列印鍊錶
2 createlinknode.prototype.print = function
()else
9 }
增刪改查都要有吧:
1插入節點: 在當前的節點後面插入乙個節點物件。注意一下,如果當前節點是尾節點時的單獨處理。//從某乙個節點的後面開始插入乙個節點
2 createlinknode.prototype.insertnode = function
(node)
67 node.nextnode = this
.nextnode;
89 node.prenode = this;10
this.nextnode =node;11}
1213
//刪除某乙個節點
14 createlinknode.prototype.removenode = function
()
還要有最不能少的反序:
1保證鍊錶基本機構不變,並要返回新的頭節點(原來的尾節點)。和對尾節點的單獨處理。//反序鍊錶
2 createlinknode.prototype.revertnode = function
();4
function
revert()else15}
1617
return revert.call(this
);18
19 }
我們來測試一下(好激動)
1//start
2var ln1 = new createlinknode(, null, null);3
var ln2 = new createlinknode(, ln1, null);4
var ln3 = new createlinknode(, ln2, null);5
var ln4 = new createlinknode(, ln3, null);6
var ln5 = new createlinknode(, null, null);7
var lhead =ln1;
8ln4.insertnode(ln5);
910 console.log(lhead.print());//
12345
1115
ln3.removenode();
16 console.log(lhead.print());//
1245
17ln2.insertnode(ln3);
18 console.log(lhead.print());//
12345
19 lhead =lhead.revertnode();
20 console.log(lhead.print());//
54321
js實現鍊錶
平時我們使用最多的資料結構應該是陣列,很多東西都可以用陣列來輕鬆實現,但在某些程式語言中,陣列的長度是預先設定好的,想要額外新增元素或者刪除元素是一件比較困難的事。那麼使用鍊錶的話恰恰就解決了這些問題,對於鍊錶來說刪除或新增乙個元素是非常方便的,除了資料的隨機訪問 可以實現但是比較麻煩,比如可以通過...
單向鍊錶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實現鍊錶
鍊錶是一種動態的資料結構,不同於陣列的是,鍊錶分配記憶體空間的靈活性,它不會像陣列一樣被分配一塊連續的記憶體。當你想在陣列的任意位置,插入乙個新值的時候,必須對陣列中的各個元素進行相應的位置移動才能達到目標,開銷顯然是很大的。然而鍊錶的靈活性在於它的每個元素節點分為兩部分,一部分是儲存元素本身,另一...