久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)之使用JavaScript實(shí)現(xiàn)鏈表的操作(實(shí)例詳解)

      本篇文章給大家?guī)砹藬?shù)據(jù)結(jié)構(gòu)學(xué)習(xí)中關(guān)于怎樣使用JavaScript實(shí)現(xiàn)鏈表的相關(guān)知識(shí),希望對(duì)大家有幫助。

      數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)之使用JavaScript實(shí)現(xiàn)鏈表的操作(實(shí)例詳解)

      鏈表有以下幾個(gè)特點(diǎn):

      • 可以動(dòng)態(tài)擴(kuò)展空間(在js中,數(shù)組也是這樣的,但是有的語言中數(shù)組的長(zhǎng)度是固定的,不能動(dòng)態(tài)添加,如c語言)

      • 需要一個(gè)頭節(jié)點(diǎn)

      • 需要知道下一個(gè)節(jié)點(diǎn)的地址

      數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)之使用JavaScript實(shí)現(xiàn)鏈表的操作(實(shí)例詳解)

      ??可以將鏈表中的每個(gè)節(jié)點(diǎn)看成是一個(gè)對(duì)象,這個(gè)對(duì)象中有兩個(gè)屬性,一個(gè)是該節(jié)點(diǎn)的值,一個(gè)是該節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)的地址(如果是雙鏈表,還要添加前一個(gè)節(jié)點(diǎn)地址的屬性)

      實(shí)現(xiàn)增加節(jié)點(diǎn)的操作:

      數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)之使用JavaScript實(shí)現(xiàn)鏈表的操作(實(shí)例詳解)

      1 在尾節(jié)點(diǎn)處添加節(jié)點(diǎn)

       //在尾節(jié)點(diǎn)處添加節(jié)點(diǎn)         function append(element){         let node = new node(element);         let current;         if(head == null){             current = node         }else{             while(current.next){                 current = current.next;             }             current.next = node         }             length++;         }

      代碼分析:

      • 根據(jù)傳入的元素定義一個(gè)節(jié)點(diǎn),該元素作為這個(gè)節(jié)點(diǎn)的值
      • 定義一個(gè)變量表示當(dāng)前的節(jié)點(diǎn)
      • 判斷是否含有頭節(jié)點(diǎn),如果沒有頭節(jié)點(diǎn),說明鏈表中還沒有值,將傳進(jìn)來的這個(gè)值作為頭節(jié)點(diǎn);否則,對(duì)鏈表進(jìn)行遍歷,找到最后一個(gè)節(jié)點(diǎn),將其next屬性賦值為新增的節(jié)點(diǎn)
      • 鏈表的長(zhǎng)度+1

      2.在任意位置添加節(jié)點(diǎn)

      分析

      ??將這個(gè)位置的前一個(gè)節(jié)點(diǎn)的next屬性賦值為這個(gè)節(jié)點(diǎn),并將它原先的下一個(gè)節(jié)點(diǎn)保存下來,賦值給現(xiàn)在這個(gè)節(jié)點(diǎn)的next屬性

      function insert(position,element){         let node = new Node(element);         let current = head;         let previous;//當(dāng)前節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn),在position處添加節(jié)點(diǎn),就是在previos和current之間添加         if(position = 0){           node.next = head;           head = node;         }else{           for(let i = 0;i< position;i++){             pervious = current;             current = current.next;           }            pervious.next = node;           node.next = current;         }         length++;         return true;       }

      代碼分析:

      • 檢查postion是否越界,若沒有越界,則創(chuàng)建一個(gè)節(jié)點(diǎn)
      • 定義一個(gè)變量表示當(dāng)前的節(jié)點(diǎn),初始化為頭節(jié)點(diǎn),表示從頭節(jié)點(diǎn)開始遍歷;一個(gè)變量表示當(dāng)前節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn),作用是插入節(jié)點(diǎn)時(shí)方便找到前一個(gè)節(jié)點(diǎn)
      • 判斷是否在頭節(jié)點(diǎn)前添加,如果是就將頭節(jié)點(diǎn)賦給node的next屬性,并且頭節(jié)點(diǎn)改為這個(gè)節(jié)點(diǎn);否則,遍歷出這個(gè)位置的節(jié)點(diǎn),將該節(jié)點(diǎn)插入到這個(gè)位置的節(jié)點(diǎn)前面
      • 鏈表的長(zhǎng)度+1

      實(shí)現(xiàn)刪除節(jié)點(diǎn)的操作

      數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)之使用JavaScript實(shí)現(xiàn)鏈表的操作(實(shí)例詳解)

      分析:刪除節(jié)點(diǎn)的操作就是將目標(biāo)節(jié)點(diǎn)前面的那個(gè)節(jié)點(diǎn)的指針指向目標(biāo)節(jié)點(diǎn)的后一個(gè)節(jié)點(diǎn)

      1.刪除指定節(jié)點(diǎn)

      function removed(element){            let node = new Node(element);       let pervious;       let nextNode;       let current = head;      if(head != null){       while (current != node){         pervious = current;         current = current.next;         nextNode = current.next;       }          pervious.next = nextNode;       length--;       return true;     }else{       return false;     }         }

      2.刪除指定位置的節(jié)點(diǎn)

      function removedAt(position){         let current = head;         let pervious;         let nextNode;         let i = 0;          while(i < position){           pervious = current;           current = current.next;           nextNode = current.next;         }          pervious.next = nextNode;         length--;         return true;       }

      實(shí)現(xiàn)查詢節(jié)點(diǎn)的操作

      分析:查詢節(jié)點(diǎn)和刪除節(jié)點(diǎn)差不多,都是通過遍歷,找到相應(yīng)的節(jié)點(diǎn)或是相應(yīng)的位置,然后進(jìn)行操作

      1.查詢某個(gè)位置是哪個(gè)節(jié)點(diǎn)

      function searchElement(element){       //輸入元素,找到該元素后返回該元素的位置       if(head != null){         let node = new Node(element);         let current;         let index = 0;         if(head == node){           return 0;         }else{           current = head;           while(current != node){             current = current.next;             index++;           }           return index;         }       }else{         return -1;       }     }

      2.查詢某個(gè)節(jié)點(diǎn)是在哪個(gè)位置

      function searchPosition(position){         let i = 0;         let current = head;         while(i< position){           current = current.next;           i++;         }         return current;     }

      思路總結(jié)

      ??關(guān)于鏈表的操作還有很多,復(fù)雜一點(diǎn)的鏈表還有雙鏈表(在初始化節(jié)點(diǎn)的時(shí)候增加一個(gè)前節(jié)點(diǎn))和循環(huán)鏈表(尾節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)是頭節(jié)點(diǎn)),這些鏈表的操作也是可以使用js實(shí)現(xiàn)的,這里就不多說了??偨Y(jié)一下,鏈表的核心在于

      • 鏈表中節(jié)點(diǎn)可看做一個(gè)對(duì)象,有兩個(gè)屬性值,一個(gè)是節(jié)點(diǎn)值,一個(gè)是指針
      • 鏈表的增刪就是改變指針指向
      • 鏈表查找時(shí),重點(diǎn)是current = current.next

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)