<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        JavaScript數據結構之雙向鏈表和雙向循環鏈表的實現

        來源:懂視網 責編:小采 時間:2020-11-27 22:24:40
        文檔

        JavaScript數據結構之雙向鏈表和雙向循環鏈表的實現

        JavaScript數據結構之雙向鏈表和雙向循環鏈表的實現:雙向鏈表和普通鏈表的區別在于,在鏈表中,一個節點只有鏈向下一個節點的鏈接,而在雙向鏈表中,鏈接是雙向的:一個鏈向下一個元素,另一個鏈向前一個元素。 雙向鏈表提供了兩種迭代列表的方法:從頭到尾,或者反過來。我們也可以訪問一個特定節點的下一個
        推薦度:
        導讀JavaScript數據結構之雙向鏈表和雙向循環鏈表的實現:雙向鏈表和普通鏈表的區別在于,在鏈表中,一個節點只有鏈向下一個節點的鏈接,而在雙向鏈表中,鏈接是雙向的:一個鏈向下一個元素,另一個鏈向前一個元素。 雙向鏈表提供了兩種迭代列表的方法:從頭到尾,或者反過來。我們也可以訪問一個特定節點的下一個

        雙向鏈表和普通鏈表的區別在于,在鏈表中,一個節點只有鏈向下一個節點的鏈接,而在雙向鏈表中,鏈接是雙向的:一個鏈向下一個元素,另一個鏈向前一個元素。

        雙向鏈表提供了兩種迭代列表的方法:從頭到尾,或者反過來。我們也可以訪問一個特定節點的下一個或前一個元素。在單向鏈表中,如果迭代列表時錯過了要找的元素,就需要回到列表起點,重新開始迭代。這是雙向鏈表的一個優點。

        雙向鏈表:單向鏈表只能向著一個方向遍歷鏈表節點,而在節點指針域中增加了前向指針的雙向鏈表,則可以向著兩個方向遍歷節點。這使得雙向鏈表也可以在任何一個節點遍歷整個鏈表。

        function DoublyLinkedList() { 
         var Node = function(element) { 
         this.element = element; 
         this.next = null; 
         this.prev = null; 
         }; 
         
         var length = 0, 
         head = null, 
         tail = null; 
         
         this.append = function(element){ 
         var node = Node(element), 
         current, 
         previous; 
         
         if(!head){ 
         head = node; 
         tail = node; 
         }else{ 
         current = head; 
         while(current){ 
         previous = current; 
         current = current.next; 
         } 
         
         node.next = current; 
         current.prev = node; 
         previous.next = node; 
         node.prev = previous; 
         } 
         
         length++; 
         return true; 
         } 
         
         this.insert = function(position,element){ 
         if(position > -1 && position < length){ 
         var node = new Node(element), 
         current = head, 
         previous, 
         index = 0; 
         
         if(position === 0){ 
         
         if(!head){ 
         head = node; 
         tail = node; 
         }else{ 
         node.next = current; 
         current.prev = node; 
         head = node; 
         } 
         
         }else if (position === length -1){ 
         current = tail; 
         current.next = node; 
         node.prev = current; 
         }else { 
         while(index++ < position){ 
         previous = current; 
         current = current.next; 
         } 
         node.next = current; 
         previous.next = node; 
         current.prev = node; 
         node.prev = previous; 
         } 
         
         length++; 
         return true; 
         }else{ 
         return false; 
         } 
         }; 
         
         this.removeAt = function(position){ 
         if(position > -1 && position < length){ 
         var current = head, 
         index = 0, 
         previous; 
         
         if (position === 0) { 
         head = current.next; 
         
         if(length === 1){ 
         tail = null; 
         }else{ 
         head.prev = null; 
         } 
         }else if(position === length - 1){ 
         current = tail; 
         tail = current.prev; 
         tail.next = null; 
         } else{ 
         while(index++ < position){ 
         previous = current; 
         current = current.next; 
         } 
         
         previous.next = current.next; 
         current.next.prev = previous; 
         }; 
         length-- ; 
         
         return current.element; 
         }else{ 
         return false; 
         } 
         }; 
         
         this.remove = function(element){ 
         var current = head, 
         previous; 
         
         if(current.element === element){ 
         head = current.next; 
         } 
         previous = current; 
         current = current.next; 
         
         while(current){ 
         if (current.element = element) { 
         previous.next = current.next; 
         current.next.prev = previous; 
         }else{ 
         previous = current; 
         current = current.next; 
         } 
         } 
         return false; 
         }; 
         
         this.remove = function(){ 
         if (length === 0) { 
         return false; 
         }; 
         
         var current = head, 
         previous; 
         
         if(length === 1){ 
         head = null; 
         tail = null; 
         length--; 
         return current.element; 
         } 
         
         while(current){ 
         previous = current; 
         current = current.next; 
         } 
         
         previous.next = null; 
         length--; 
         return current.element; 
         }; 
         
         this.indexOf = function(element){ 
         var current = head, 
         index = 0; 
         
         while(current && index++ < length){ 
         if (current.element === element) { 
         return index; 
         }; 
         current = current.next; 
         } 
         
         return false; 
         }; 
         
         this.isEmpty = function(){ 
         return length === 0; 
         }; 
         
         this.size = function(){ 
         return length; 
         }; 
         
         this.toString = function(){ 
         var current = head, 
         string = ''; 
         
         while(current){ 
         string += current.element; 
         current = current.next; 
         } 
         return string; 
         }; 
         
         this.getHead = function(){ 
         return head; 
         }; 
         
         this.getTail = function(){ 
         return tail; 
         }; 
        } 
        

        雙向循環鏈表:將雙向鏈表的頭尾指針相連,就構成了雙向循環鏈表。這種鏈表從任意一個節點都可以同時向兩個方向進行節點遍歷,查詢節點的速度也是最快的。

        /*雙向循環鏈表*/ 
        function DoublyCircularLinkedList(){ 
         var Node = function(element){ 
         this.element = element; 
         this.next = null; 
         this.prev = null; 
         }; 
         
         var length = 0, 
         head = null, 
         tail = null; 
         
         this.append = function(element){ 
         var node = new Node(element), 
         current, 
         previous; 
         
         if (!head) { 
         head = node; 
         tail = node; 
         head.prev = tail; 
         tail.next = head; 
         }else{ 
         current = head; 
         
         while(current.next !== head){ 
         previous = current; 
         current = current.next; 
         } 
         
         current.next = node; 
         node.next = head; 
         node.prev = current; 
         }; 
         
         length++; 
         return true; 
         }; 
         
         this.insert = function(position, element){ 
         if(position >= 0 && position <= length){ 
         var node = new Node(element), 
         index = 0, 
         current = head, 
         previous; 
         
         if(position === 0){ 
         
         if(!head){ 
         
         node.next = node; 
         node.tail = node; 
         head = node; 
         tail = node; 
         
         }else{ 
         
         current.prev = node; 
         node.next = current; 
         head = node; 
         node.prev = tail; 
         
         } 
         
         }else if(position === length){ 
         current = tail; 
         
         current.next = node; 
         node.prev = current; 
         tail = node; 
         node.next = head; 
         }else{ 
         
         while(index++ < position){ 
         previous = current; 
         current = current.next; 
         } 
         
         current.prev = node; 
         node.next = current; 
         previous.next = node; 
         node.prev = previous; 
         
         } 
         
         length++; 
         return true; 
         }else{ 
         return false; 
         } 
         }; 
         
         this.removeAt = function(position){ 
         if(position > -1 && position < length){ 
         
         var current = head, 
         index = 0, 
         previous; 
         
         if(position === 0){ 
         
         current.next.previous = tail; 
         head = current.next; 
         
         }else if(position === length - 1){ 
         
         current = tail; 
         
         current.prev.next = head; 
         head.prev = current.prev; 
         tail = current.prev; 
         }else{ 
         
         while(index++ < position){ 
         previous = current; 
         current = current.next; 
         } 
         
         previous.next = current.next; 
         current.next.prev = previous; 
         
         } 
         
         length--; 
         return true; 
         }else{ 
         return false; 
         } 
         }; 
         
         this.remove = function(element){ 
         var current = head, 
         previous, 
         indexCheck = 0; 
         
         while(current && indexCheck < length){ 
         if(current.element === element){ 
         if(indexCheck === 0){ 
         current.next.prev = tail; 
         head = current.next; 
         }else{ 
         current.next.prev = previous; 
         previous.next = current.next; 
         } 
         length--; 
         return true; 
         } 
         
         previous = current; 
         current = current.next; 
         indexCheck++; 
         } 
         
         return false; 
         }; 
         
         this.remove = function(){ 
         if(length === 0){ 
         return false; 
         } 
         
         var current = head, 
         previous, 
         indexCheck = 0; 
         
         if(length === 1){ 
         head = null; 
         tail = null; 
         length--; 
         return current.element; 
         } 
         
         while(indexCheck++ < length){ 
         previous = current; 
         current = current.next; 
         } 
         
         previous.next = head; 
         tail = previous.next; 
         length--; 
         return current.element; 
         }; 
         
         this.indexOf = function(element){ 
         var current = head, 
         index = 0; 
         
         while(current && index++ < length){ 
         if(current.element === element){ 
         return index; 
         } 
         current = current.next; 
         } 
         
         return false; 
         }; 
         
         this.toString = function(){ 
         var current = head, 
         indexCheck = 0, 
         string = ''; 
         
         while(current && indexCheck < length){ 
         string += current.element; 
         indexCheck++; 
         current = current.next; 
         } 
         
         return string; 
         }; 
         
         this.isEmpty = function(){ 
         return length === 0; 
         }; 
         
         this.getHead = function(){ 
         return head; 
         }; 
         
         this.getTail = function(){ 
         return tail; 
         }; 
         
         this.size = function(){ 
         return length; 
         }; 
        } 

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        JavaScript數據結構之雙向鏈表和雙向循環鏈表的實現

        JavaScript數據結構之雙向鏈表和雙向循環鏈表的實現:雙向鏈表和普通鏈表的區別在于,在鏈表中,一個節點只有鏈向下一個節點的鏈接,而在雙向鏈表中,鏈接是雙向的:一個鏈向下一個元素,另一個鏈向前一個元素。 雙向鏈表提供了兩種迭代列表的方法:從頭到尾,或者反過來。我們也可以訪問一個特定節點的下一個
        推薦度:
        標簽: 數據 實現 js
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 一级毛片免费在线观看网站| 亚洲中文字幕乱码AV波多JI| 黄网站色视频免费看无下截 | 亚洲国产精品无码专区影院| 国产亚洲高清在线精品不卡| 好吊妞998视频免费观看在线| 亚洲an日韩专区在线| 无码人妻一区二区三区免费手机 | 亚洲欧美日韩中文无线码| 手机在线免费视频| 亚洲人成色4444在线观看| 午夜免费福利在线| 老司机午夜在线视频免费| 国产亚洲成人在线播放va| WWW免费视频在线观看播放| 亚洲国产精品无码专区| 在线免费观看你懂的| 亚洲国产情侣一区二区三区| 毛片免费在线播放| 深夜a级毛片免费无码| 亚洲日韩精品无码专区网站| a级片免费在线观看| 久久综合亚洲色HEZYO社区| 免费可以在线看A∨网站| 亚洲日韩在线中文字幕综合 | 亚洲成亚洲乱码一二三四区软件| 亚洲视频在线免费观看| 2020国产精品亚洲综合网| 日本免费电影一区| A国产一区二区免费入口| 亚洲国产精品久久久久久| 青苹果乐园免费高清在线| 特黄特色大片免费| 亚洲第一精品在线视频| 亚洲免费一级视频| 免费福利在线观看| 亚洲综合久久成人69| 国产大片线上免费看| 久久午夜伦鲁片免费无码| 久久精品国产亚洲AV| 久久亚洲综合色一区二区三区 |