摘要:起因最近在看數據結構與算法描述,然后上去搜索,想找合適的庫參考并記錄下來,以備以后用時能拿來即用,最沒有發現很合自己意的,于是就決定自己一一實現出來。自己的實現源代碼地址
起因
最近在看《數據結構與算法--javascript描述》,然后上npmjs.org去搜索,想找合適的庫參考并記錄下來,以備以后用時能拿來即用,最沒有發現很合自己意的,于是就決定自己一一實現出來。
npmjs相關庫complex-list、smart-list
編程思路雙鏈表多了一個指向前趨的指針,故單鏈表中的輔助函數findPre就不需要了;
增加了反向輸出方法;
注意邊界條件的處理。
DoubleNode.js
(function(){ "use strict"; function Node(element){ this.element = element; this.next = null; this.previous = null; } module.exports = Node; })();
DoubleLinkedList.js
(function(){ "use strict"; var Node = require("./lib/DoubleNode"); function DoubleLinkedList(){ this._head = new Node("This is Head Node."); this._size = 0; } DoubleLinkedList.prototype.getHead = function(){ return this._head; }; DoubleLinkedList.prototype.isEmpty = function(){ return this._size === 0; }; DoubleLinkedList.prototype.size = function(){ return this._size; }; DoubleLinkedList.prototype.findLast = function(){ var currNode = this.getHead(); while(currNode.next){ currNode = currNode.next; } return currNode; }; DoubleLinkedList.prototype.add = function(item){ if(item == null) return null; this.insert(item); }; DoubleLinkedList.prototype.remove = function(item){ if(item) { var node = this.find(item); if(node == null) return ; if (node.next === null) { node.previous.next = null; node.previous = null; } else{ node.previous.next = node.next; node.next.previous = node.previous; node.next = null; node.previous = null; } this._size--; } }; DoubleLinkedList.prototype.find = function(item){ if(item == null) return null; var currNode = this.getHead(); while(currNode && currNode.element !== item){ currNode = currNode.next; } return currNode; }; DoubleLinkedList.prototype.insert = function(newElement, item){ var newNode = new Node(newElement); var finder = item ? this.find(item) : null; if(!finder){ var last = this.findLast(); newNode.previous = last; last.next = newNode; } else{ newNode.next = finder.next; newNode.previous = finder; finder.next.previous = newNode; finder.next = newNode; } this._size++; }; DoubleLinkedList.prototype.dispReverse = function(){ var currNode = this.findLast(); while(currNode != this.getHead()){ console.log(currNode.element); currNode = currNode.previous; } }; DoubleLinkedList.prototype.display = function(){ var currNode = this.getHead().next; while(currNode){ console.log(currNode.element); currNode = currNode.next; } }; module.exports = DoubleLinkedList; })();源代碼地址
https://github.com/zhoutk/js-data-struct http://git.oschina.net/zhoutk/jsDataStructs
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/92336.html
摘要:什么是雙鏈表上一篇實戰數據結構基礎之單鏈表說到單鏈表由一個一個的作為節點的對象構成的,每一個節點都有指向下一個節點的指針,最后一個節點的指針域指向空。 什么是雙鏈表? 上一篇實戰PHP數據結構基礎之單鏈表說到 單鏈表由一個一個的作為節點的對象構成的,每一個節點都有指向下一個節點的指針,最后一個節點的指針域指向空。每個節點可以存儲任何數據類型。 而雙鏈表每個節點有兩個指針域,分別指向前驅...
摘要:一般我們都構造雙向循環鏈表。循環鏈表的操作和單鏈表的操作基本一致,差別僅僅在于算法中的循環條件有所不同。單向循環鏈表雙向循環鏈表單向循環鏈表是在單鏈表基礎上,將最后一個節點的指針指向鏈表頭。 維基百科 雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個數據結點中都有兩個指針,分別指向直接后繼和直接前驅。所以,從雙向鏈表中的任意一個結點開始,都可以很方便地訪問它的前驅結點和后繼結點。一般我們都構...
摘要:記得在一個公司面試上有一道題,寫一個雙向鏈表,包含鏈表的基本操作,插入,刪除,獲取長度等操作,由于時間匆忙,代碼寫的比較亂,連自己都沒眼看了,后來細想自己從來都沒有細心的寫過數據結構,總覺得只要原理明白了就萬事大吉了,事實證明,理論和實踐還 記得在一個公司面試上有一道題,寫一個雙向鏈表,包含鏈表的基本操作,插入,刪除,獲取長度等操作,由于時間匆忙,代碼寫的比較亂,連自己都沒眼看了,后來...
閱讀 661·2021-10-09 09:41
閱讀 641·2019-08-30 15:53
閱讀 1071·2019-08-30 15:53
閱讀 1207·2019-08-30 11:01
閱讀 1562·2019-08-29 17:31
閱讀 983·2019-08-29 14:05
閱讀 1712·2019-08-29 12:49
閱讀 409·2019-08-28 18:17