最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript數(shù)據(jù)結(jié)構(gòu)之雙向鏈表定義與使用方法示例

 更新時間:2017年10月27日 11:35:50   作者:Jancy1072  
這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)之雙向鏈表定義與使用方法,簡單介紹了雙向鏈表的原理,并結(jié)合實例形式分析了雙向鏈表的定義與使用方法,需要的朋友可以參考下

本文實例講述了JavaScript數(shù)據(jù)結(jié)構(gòu)之雙向鏈表定義與使用方法。分享給大家供大家參考,具體如下:

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

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

function DoubleLink(){
  var length=0;//鏈表長度
  var head=null;//頭結(jié)點的引用
  var tail=null;//尾節(jié)點的引用
  function Node(e){
    this.element=e;
    this.next=null;
    this.previous=null;
  }
  this.insertAt=function(position,e){//在任意位置添加節(jié)點
    if(position>=0&&position<=length){//判斷邊界
      var node=new Node(e);
      var current=head;
      var previous;
      var index=0;
      if(position==0){//在第一個位置添加
        if(!head){//鏈表為空的時候添加第一個節(jié)點
          head=node;
          tail=node;
        }else{
          current=head;
          node.next=current;
          current.previous=node;
          head=node;
        }
      }else if(position==length){//在鏈表末尾添加
        current=tail;
        current.next=node;
        node.previous=current;
        tail=node;
      }else{
        while(index<position){
          previous=current;
          current=current.next;
          index++;
        }
        previous.next=node;
        node.previous=previous;
        node.next=current;
        current.previous=node;
      }
      length++;
      return true;
    }else{
      return null;
    }
  }
  this.removeAt=function(position){//刪除任意位置的節(jié)點
    if(position>-1&&position<length){//邊界判斷
      var current=head;
      var previous;
      var index=0;
      if(position==0){//刪除第一個位置的節(jié)點
        head=current.next;
        if(length==1){//如果只有一項
          tail=null;
        }else{
          head.previous=null;
        }
      }else if(position==length-1){//刪除最后一項
        current=tail;
        tail=current.previous;
        tail.next=null;
      }else{
        while(index<position){
          previous=current;
          current=current.next;
          index++;
        }
        previous.next=current.next;
        current.next.previous=previous;
      }
      length--;
      return current.element;
    }else{
      return null;
    }
  }
  this.indexOf=function(e){//獲取節(jié)點位置,從頭開始數(shù)
    var current=head;
    var index=0;
    while(current){
      if(current.element==e){
        return index;
      }
      current=current.next;
      index++;
      if(index>=length)return null;
    }
  }
  this.isEmpty=function(){//判斷鏈表是否為空
    return length==0;
  }
  this.mylength=function(){//鏈表長度
    return length;
  }
  this.print1=function(){//從頭到尾打印鏈表
    var current=head;
    while(current){
      console.log(current.element);
      current=current.next;
    }
  }
  this.print2=function(){//從尾到頭打印鏈表
    var current=tail;
    while(current){
      console.log(current.element);
      current=current.previous;
    }
  }
  this.getHead=function(){//獲取頭節(jié)點
    return head;
  }
  this.getTail=function(){//獲取尾節(jié)點
    return tail;
  }
}
var link=new DoubleLink();//實例化一個對象
link.insertAt(0,'d');
link.insertAt(1,'e');
link.insertAt(2,'f');
link.insertAt(3,'g');
link.insertAt(4,'h');
link.insertAt(5,'i');
link.insertAt(6,'j');
link.insertAt(7,'k');
link.removeAt(7);
link.removeAt(0);
link.print1();//efghij
link.print2();//jihgfe
console.log(link.getHead());//e
console.log(link.getTail());//j
console.log(link.indexOf('f'));//1

運行結(jié)果:

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript數(shù)學(xué)運算用法總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯誤與調(diào)試技巧總結(jié)

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

相關(guān)文章

  • JS獲取對象屬性API匯總枚舉symbol

    JS獲取對象屬性API匯總枚舉symbol

    這篇文章主要為大家介紹了JS獲取對象屬性API匯總可枚舉性不可枚舉性及symbol介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 如何通過遞歸方法實現(xiàn)用json-diff渲染json字符串對比結(jié)果

    如何通過遞歸方法實現(xiàn)用json-diff渲染json字符串對比結(jié)果

    JsonDiff是一個高性能json差異發(fā)現(xiàn)工具,它幾乎可以發(fā)現(xiàn)任何JSON結(jié)構(gòu)的差異,并且將錯誤信息反饋給用戶,下面這篇文章主要給大家介紹了關(guān)于如何通過遞歸方法實現(xiàn)用json-diff渲染json字符串對比結(jié)果的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Bootstrap基本組件學(xué)習(xí)筆記之縮略圖(13)

    Bootstrap基本組件學(xué)習(xí)筆記之縮略圖(13)

    這篇文章主要為大家詳細介紹了Bootstrap基本組件學(xué)習(xí)筆記之縮略圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 微信js-sdk地理位置接口用法示例

    微信js-sdk地理位置接口用法示例

    這篇文章主要介紹了微信js-sdk地理位置接口用法,結(jié)合實例形式分析了js-sdk地理位置接口的定義與簡單使用方法,需要的朋友可以參考下
    2016-10-10
  • 微信小程序基于ColorUI構(gòu)建皮皮蝦短視頻去水印組件

    微信小程序基于ColorUI構(gòu)建皮皮蝦短視頻去水印組件

    這篇文章主要介紹了微信小程序-基于ColorUI構(gòu)建皮皮蝦短視頻去水印組件,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-11-11
  • 詳解a++和++a的區(qū)別

    詳解a++和++a的區(qū)別

    搞開發(fā)已經(jīng)很久了,一直搞不懂a(chǎn)++和++a到底有所什么不同,后來通過查閱相關(guān)資料總結(jié)出一點規(guī)律,下面小編通過本文給大家介紹
    2017-08-08
  • ES6入門教程之let和const命令詳解

    ES6入門教程之let和const命令詳解

    最近做項目的過程中,使用到了ES6,因為之前很少接觸,所以使用起來還不夠熟悉。通過學(xué)習(xí)網(wǎng)上的教程后覺著有必要整理下遇到的let和const命令,所以這篇文章主要給大家介紹了ES6中l(wèi)et和const命令的相關(guān)資料,需要的朋友可以參考下。
    2017-05-05
  • js使用Replace結(jié)合正則替換重復(fù)出現(xiàn)的字符串功能示例

    js使用Replace結(jié)合正則替換重復(fù)出現(xiàn)的字符串功能示例

    這篇文章主要介紹了js使用Replace結(jié)合正則替換重復(fù)出現(xiàn)的字符串功能,可實現(xiàn)關(guān)鍵詞描紅的功能,涉及JS重復(fù)匹配的相關(guān)操作技巧,需要的朋友可以參考下
    2016-12-12
  • 微信小程序?qū)崿F(xiàn)的貪吃蛇游戲【附源碼下載】

    微信小程序?qū)崿F(xiàn)的貪吃蛇游戲【附源碼下載】

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)的貪吃蛇游戲,結(jié)合實例形式分析了微信小程序?qū)崿F(xiàn)貪吃蛇游戲功能的相關(guān)界面布局與代碼邏輯操作技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下
    2018-01-01
  • JavaScript如何判斷對象有某屬性

    JavaScript如何判斷對象有某屬性

    這篇文章主要介紹了JavaScript如何判斷對象有某屬性,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07

最新評論

天峨县| 云南省| 雅江县| 巩留县| 虎林市| 玛沁县| 尚志市| 武隆县| 祁阳县| 青岛市| 雷山县| 铅山县| 静安区| 凤庆县| 邮箱| 红安县| 偏关县| 治县。| 怀来县| 临邑县| 葵青区| 当雄县| 成都市| 华亭县| 池州市| 宁陕县| 鄂温| 红原县| 安顺市| 民和| 铁力市| 衡东县| 丹阳市| 远安县| 新丰县| 乐业县| 谷城县| 邳州市| 讷河市| 云和县| 临夏县|