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語言
- js驗證表單項是否為空例項程式碼JS
- angularJS進行表單提交程式碼例項AngularJS
- js重置form表單元素值程式碼例項JSORM
- PHP 完整表單例項PHP單例
- Js表單驗證JS
- 資料倉儲之拉鍊表
- 極限儲存之拉鍊表
- js獲取form表單下所有表單元素JSORM
- js表單提交後提交按鈕不可點選程式碼例項JS
- 將表單元素轉換為json格式物件例項程式碼JSON物件
- js選項卡簡單程式碼例項JS
- (JS基礎)操作表單JS
- angularjs表單驗證AngularJS
- 表單驗證<AngularJs>AngularJS
- js表單檔案提交JS
- js獲取表單元素所在的form表單物件JSORM物件
- 走進AngularJs(九)表單及表單驗證AngularJS
- 清空form表單例項程式碼ORM單例
- 選中select下拉選單項提交表單
- jQuery表單驗證簡單程式碼例項jQuery
- ThingJS加入js的基本表單功能JS
- 拉鍊表的建立、查詢和回滾
- 資料倉儲之拉鍊表設計
- js如何阻止表單提交簡單介紹JS
- JavaScript 表單驗證程式碼例項JavaScript
- 表單提示美化效果程式碼例項
- js map集合簡單程式碼例項JS
- JSON簡單格式程式碼例項JSON
- js解析php格式的表單到json物件PHPJSON物件
- NOIP2006能量項鍊[環形DP]
- JSON Schema與表單驗證JSON
- Js提交表單的兩種方法JS
- 將Json值填充至表單JSON
- AngularJS教程十九—— 表單校驗AngularJS
- ExtJS 3.4 表單控制元件JS控制元件
- 深入講解拉鍊表,還怕面試官問?面試