js 單項鍊表
介紹連結串列
連結串列是由一組節點組成的集合。每一個節點都使用一個物件的引用指向它的後續借點。指向另外一個借點的引用叫做鏈。
很多程式語言中陣列的長度是固定的,就是定義陣列的時候需要定義陣列的長度,所以當陣列已經被資料填滿的時候,需要再加入新的元素就很困難。只能說在部分變成語言中會有這種情況,在javascript中和php中陣列的長度是可以任意增加的。在陣列中新增和刪除元素也是比較麻煩,因為要將陣列中其他元素向前或者向後平移,這個在javascript中也不是問題,javascript中有一個很方便的方法splice()方法很方便的就可以新增或刪除元素。
但是凡是都是相對的,javascript中的陣列也有自己的問題,他們被設計成了物件,與其他語言(比如c++和java)相比它的效率很低。
如果在實際的使用中發現陣列的效率很慢,就可以考慮使用連結串列來代替。陣列還有個優勢是可以根據鍵值很方便的訪問陣列的值,除此之外,連結串列在任何場合都可以代替陣列。如果需要隨機地訪問元素,陣列仍然是更好的選擇。
程式碼實現
定義連結串列節點(Node)類
Node類包含兩個屬性,element用來儲存節點上的資料,next用來儲存指向下一個節點的連結
class Node { constructor(element) { this.element = element; // 表示節點上的資料 this.next = null; // 表示指向下一個節點的連結 } }export default Node;
定義連結串列類(LinkedList)類
LinkedList類提供插入節點,刪除節點,顯示連結串列節點元素的方法,以及一些其他的輔助方法
import Node from './Node';/** * Linked List class */class LinkedList { /** * 構造器,初始化頭節點 */ constructor() { this.head = new Node('head'); // 節點頭列表 } /** * 根據指定值找出當前節點 * 輔助方法 * @param {*} item */ _find(item) { let currNode = this.head; while(currNode.element != item) { currNode = currNode.next; } return currNode; } /** * 把新的節點插入到指定節點的後面 * @param {*} newELement 插入的新節點 * @param {*} item 插入元素的前一個節點值 */ insert(newELement, item) { let newNode = new Node(newELement); let currNode = this._find(item); newNode.next = currNode.next; currNode.next = newNode; } /** * 移除節點 * @param {*} item */ remove(item) { // 找出指定節點的前一個節點 let prevNode = this.head; while(prevNode.next != null && prevNode.next.element != item) { prevNode = prevNode.next; } if (prevNode.next != null) { // 設定前一個節點next指向當前節點的next prevNode.next = prevNode.next.next; } } /** * 顯示所有節點資料 */ display() { let currNode = this.head; while(currNode.next != null) { console.log(currNode.next.element); currNode = currNode.next; } } }export default LinkedList;
測試
import LinkedList from './LinkedList';// 建立一個 LinkedList 例項let ll = new LinkedList();// 插入一些元素ll.insert('zhangsan', 'head'); ll.insert('lisi', 'zhangsan'); ll.insert('wangwu', 'lisi'); ll.display(); // 顯示元素,控制檯輸出 zhangsan,lisi,wangwull.remove('lisi'); ll.display(); // 控制檯輸出 zhangsan,wangwu
原文出處:https://www.cnblogs.com/qiaojie/p/9575790.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1916/viewspace-2813435/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 實現單項鍊表
- 關於c語言單項鍊表尾新增C語言
- PHP 完整表單例項PHP單例
- 「 洛谷 」P2768 珍珠項鍊
- js表單檔案提交JS
- (JS基礎)操作表單JS
- form表單提交注意事項ORM
- 資料倉儲之拉鍊表
- ThingJS加入js的基本表單功能JS
- JavaScript 表單驗證程式碼例項JavaScript
- 當雜湊表遇上鍊表會擦除什麼火花?
- 增量表及拉鍊表,你懂了嗎?
- 基於MaxCompute的拉鍊表設計
- Vue.js表單輸入繫結Vue.js
- JS原生實現表單序列化JS
- 當雜湊表遇上鍊表會發生什麼呢?
- 資料倉儲之拉鍊表設計
- 拉鍊表的建立、查詢和回滾
- 原生JS實現表單序列化serialize()JS
- 橙單,歷經磨鍊後的匠心之作
- 使用JS實現一個簡單的選項卡效果JS
- JS 基礎篇(策略模式-表單驗證案例)JS模式
- Vue.js+ElementUI+vant生成動態表單配置Vue.jsUI
- 純原生javascript下拉框表單美化例項教程JavaScript
- 根據臉型選項鍊,打造自己的獨特氣質
- 深入講解拉鍊表,還怕面試官問?面試
- 【資料倉儲】全量表、快照表、增量表、拉鍊表、維度表、實體表、事實表
- Node.js 系列 - 搭建路由 & 處理表單提交Node.js路由
- Vue.js實現可配置的登入表單Vue.js
- 點晴OA工作流表單模板建立注意事項
- PHP透過session判斷防止表單重複提交例項PHPSession
- 【JS 口袋書】第 11 章:HTML 表單及 localStorage 的使用JSHTML
- 原生js設計表單驗證外掛的思路分析JS
- Vue.js 2.x筆記:表單繫結(3)Vue.js筆記
- 魔法手鍊
- 簡單的 Vue.js 表單驗證外掛 (vee-validate) 使用總結Vue.js
- js-動態表單校驗-吐血總結最近遇到的變態表單校驗2---element+原生JS
- vue+elementUI實現動態增加表單項並新增驗證VueUI