<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 12, comments - 3, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    java linkedlist 算法筆記一

    Posted on 2010-01-04 19:23 創意恒動力 閱讀(2530) 評論(0)  編輯  收藏

    自我理解java linkedlist插入數據的算法:
    首先看一下,linkedlist插入源代碼:

     1 public class LinkedList
     2     extends AbstractSequentialList
     3     implements List, Deque, Cloneable, java.io.Serializable
     4 {
     5     private transient Entry header = new Entry(nullnullnull);//初始化時先實例一個header,鏈表頭
     6 
     7 
     8     /**
     9      * Constructs an empty list.//構造一個空鏈表
    10      */
    11     public LinkedList() {
    12         header.next = header.previous = header; //把鏈表頭和尾先連到自己(1)
    13         addBefore(e, header);(2
    14 
    15     }
    16 
    17 .
    18 
    19  public boolean add(E e) {//插入鏈表方法
    20             return true;
    21     }
    22 .
    23 
    24 private static class Entry {//每個數據存放,所要用到的靜態內部類
    25      E element;
    26      Entry next;//后一個節點
    27      Entry previous;//接一個節點
    28 
    29      Entry(E element, Entry next, Entry previous) {
    30          this.element = element;
    31          this.next = next;
    32          this.previous = previous;
    33      }
    34 }
    35 
    36 
    37 //插入操作方法
    38     private Entry addBefore(E e, Entry entry) {
    39          Entry newEntry = new Entry(e, entry, entry.previous);(3
    40          newEntry.previous.next = newEntry;(4
    41          newEntry.next.previous = newEntry;(5
    42          size++;(6
    43          modCount++;
    44          return newEntry;
    45     }
    46 
    47 
    48 /*其他方法~~*/
    49 
    50 
    
    

    以上部分就是算法所在:(一個簡單的公式替換過程)

    算法步驟(對應上面的編號):

    (1)實例化一個header (Entry)

    header.next = header

    header.previous = header

    當有第一條數據插入鏈表:

    (3)實例化一個 Entry newEntry (以下簡稱E1)

    E1.next = header

    E1.previous = header.previous

    E1.previous.next = header.previous.next = header.next

    (4)由上面可得:

    newEntry.previous.next = newEntry;

    作用:

    相當于 E1.previous.next = header.next = E1

    其實就是,讓上一個節的next指向下一個節點數據

    所以header.next 的下一個節點就是E1

    (5)E1.next.previous = header.previous = E1(這里用得巧妙)

    其實這個用法單從E1.next.previous= E1單這么看,很直觀因為E1的下一個節點數據的上一個節點就應該是E1

    從上面可知,E1.next == header,為什么要把header.previous = E1呢?

    其實包含著一個遞歸在里面。

    如果再新增一個數據 Entry E2 :

    從上面的代碼可以看出,E2的實例化過程是:(其實linkedlist每次新增一個數據,都通過header傳值)

    Entry E2 = new Entry(data, header, header.previous);

    注意代碼部分的負值。關鍵就是這里,實例化的時候,E2.previous = header.previous = E1
    簡單得完成了負值過程。

    然后 E2.previous.next = E1.next = E2
    E2.next.previous = header.previous = E2 .......(接著插入下一條數據,如此遞歸)

    (6)記錄鏈表位數


    涉及到了一個小小的遞歸算法。

    linkedlist記錄一。完畢。。



    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 四虎1515hh永久久免费| 亚洲免费一区二区| 99久久久国产精品免费无卡顿 | 在线亚洲精品自拍| 老司机午夜性生免费福利| 日韩免费观看一级毛片看看| 久久亚洲最大成人网4438| 91香蕉成人免费网站| 国产v亚洲v天堂a无| 少妇高潮太爽了在线观看免费| 亚洲国产精品成人精品软件| 希望影院高清免费观看视频| 色在线亚洲视频www| 日韩一级在线播放免费观看| 色偷偷噜噜噜亚洲男人| 免费v片在线观看品善网| 日本视频免费观看| 日本红怡院亚洲红怡院最新| 无码精品人妻一区二区三区免费看 | 美女被吸屁股免费网站| 亚洲精品国精品久久99热| 国产特黄特色的大片观看免费视频| 在线播放亚洲第一字幕| 少妇无码一区二区三区免费| 亚洲国产精品综合一区在线| 在线免费观看一级毛片| 免费看内射乌克兰女| 亚洲国产精品成人精品无码区在线 | 亚洲精品日韩专区silk| 国产免费不卡v片在线观看| 亚洲国产精品网站在线播放| 亚洲欧洲精品成人久久曰影片| 国产亚洲精品免费视频播放| 亚洲午夜免费视频| 成年女人毛片免费播放人 | 国产成人无码区免费内射一片色欲| 久久亚洲AV无码精品色午夜麻| 日韩一区二区a片免费观看| 国产午夜亚洲精品不卡| 久久久久久久综合日本亚洲| 在人线av无码免费高潮喷水|