<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 概述 動態數組,棧,隊列底層都是依托于靜態數組,靠resize解決固定容量問題.而鏈表是真正的動態數據結構. * 鏈表是最簡單的動態數據結構. * 更深入的理解引用(或者指針). * 更深入的理解遞歸. * 輔助組成其他數據結構 . ### 鏈表Linked list * 數據存儲在"節點"(Node)中,當一個節點的next是NULL,那么這個節點就是最后一個節點. ![](https://box.kancloud.cn/38f33b7969b5acd730c12a3381eb13c7_1596x299.png) * 優點:真正的動態,不需要處理固定容量的問題.需要多少的數據,就生成多少個節點. * 缺點:喪失了隨機訪問的能力. ### 數組和鏈表的對比 #### 數組 * 數組對號用于索引有語意的情況 . scores[2] * 最大優點:支持快速查詢. #### 鏈表 * 鏈表不適合用于索引有語意的情況. * 最大優點:動態. ### 向鏈表中添加元素 和數組不同,數組在尾部添加元素比較方便,而鏈表是在頭部添加元素比較方便 . #### 在鏈表頭添加元素 ![](https://box.kancloud.cn/b362418898c1aca4888187f8567f257d_1609x640.png) #### 為鏈表設立虛擬頭結點 在向鏈表頭添加元素和在鏈表其他位置添加元素邏輯上會有差別,為什么對鏈表頭添加元素會有差別呢?因為在向鏈表添加元素的時候,需要找到鏈表待添加位置之前的一個節點,但是對于鏈表頭來說,它沒有之前的一個節點. 這時候就需要虛擬的頭結點了(dummyHead).這個dummyHead對用戶來說是沒有意義的,只是方便我們編寫邏輯.當有了dummyHead之后我們就不要對頭結點進行特殊的處理了. ![](https://box.kancloud.cn/956cd1b7296a606e83b0f3152dd2f64b_1610x437.png) #### 在鏈表中間添加元素 ![](https://box.kancloud.cn/e91d92b5b9c047a6d79c0e4ff3e4563d_1610x598.png) 在鏈表中操作的順序很重要 ![](https://box.kancloud.cn/0e55415873ede5d8b0d3602cf8e99504_1598x613.png) #### 鏈表元素的刪除(需要虛擬頭結點) 找到待刪除元素之前的那個節點. ![](https://box.kancloud.cn/2502e274e8df16deead1cddf99b85da0_1592x665.png) ### 時間復雜度 鏈表的增刪改查的時間復雜度都是O(n)的,只對鏈表頭操作是O(1) .對于鏈表來說,適合做的事情,不去修改,查也別查任意位置的元素,只查鏈表頭,增加和刪除也只對鏈表頭進行操作.因為鏈表是動態的,所以不會占用大量的內存空間,具有一定的優勢. #### 添加操作 * addLast(e) //O(n) * addFirst(e) //O(1) * add(index e) //O(n/2) = O(n) #### 刪除操作 * removeLast(e) //O(n) * removeFirst(e) //O(1) * remove(index e) //O(n/2) = O(n) #### 修改操作 * set(index e) //O(n) #### 查找操作 鏈表中不用實現find()方法,因為就算拿到了索引,也沒辦法快速訪問. * get(index) //O(n) * contains(e) //O(n)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看