1樓:使用者時代
順序表
長度固定,必須在分配記憶體之前確定陣列的長度。
儲存空間連續,即允許元素的隨機訪問。
儲存密度大,記憶體中儲存的全部是資料元素。
要訪問特定元素,可以使用索引訪問,時間複雜度為 $o(1)$。
要想在順序表中插入或刪除一個元素,都涉及到之後所有元素的移動,因此時間複雜度為 $o(n)$。
順序表最主要的問題就是要求長度是固定的,可以使用倍增-複製的辦法來支援動態擴容,將順序表變成「可變長度」的。
這個辦法不可避免的會浪費一些記憶體,因為陣列的容量總是倍增的。而且每次擴容的時候,都需要將舊的資料全部複製一份,肯定會影響效率。不過實際上,這樣做還是直接使用連結串列的效率要高。
連結串列
長度不固定,可以任意增刪。
儲存空間不連續,資料元素之間使用指標相連,每個資料元素只能訪問周圍的一個元素(根據單連結串列還是雙連結串列有所不同)。
儲存密度小,因為每個資料元素,都需要額外儲存一個指向下一元素的指標(雙連結串列則需要兩個指標)。
要訪問特定元素,只能從連結串列頭開始,遍歷到該元素,時間複雜度為 $o(n)$。在特定的資料元素之後插入或刪除元素,不涉及到其他元素的移動,因此時間複雜度為 $o(1)$。雙連結串列還允許在特定的資料元素之前插入或刪除元素。
靜態連結串列
為了彌補連結串列在記憶體分配上的不足,出現了靜態連結串列這麼一個折中的辦法。靜態連結串列比較類似於記憶體池,它會預先分配一個足夠長的陣列,之後連結串列節點都會儲存在這個陣列裡,這樣就不需要頻繁的進行記憶體分配了。
當然,這個方法的缺點是需要預先分配一個足夠長的陣列,肯定會導致記憶體的浪費。陣列不夠長到不是什麼大不了的,使用第一節的動態擴容方法就是了。
靜態連結串列一般是由兩個連結串列組成,一個儲存資料的連結串列,一個空閒節點的連結串列,如圖 所示。
塊狀連結串列
塊狀連結串列則是連結串列和順序表的結合體,將多個順序表以連結串列連線起來,如圖 4所示。
這種資料結構的優點是結合了順序表和連結串列的優點,長度可變,而且插入、刪除也比較迅速(不必移動全部元素,只需要移動某一個或幾個塊中的元素),時間複雜度約為 $o(\sqrt n)$,記憶體的佔用也不會像連結串列那麼多。
但是缺點也很明顯,就是實現起來過於複雜,要想讓時間複雜度達到 $o(\sqrt n)$,需要令塊的個數和每塊中儲存的元素個數都接近 $\sqrt n$ 才行,這進一步限制了塊狀連結串列的應用。
stl 中的 deque 結構比較類似於塊狀連結串列,只不過它記錄每一塊使用的仍然是陣列,而不是連結串列。同時 deque 只允許在兩端進行插入和刪除,實現上就容易很多。
參考資料
2樓:逸明鯨人
順序表:記憶體中地址連續
長度不可變更
支援隨機查詢 可以在o(1)內查詢元素
適用於需要大量訪問元素的 而少量增添/刪除元素的程式連結串列 :記憶體中地址非連續
長度可以實時變化
不支援隨機查詢 查詢元素時間複雜度o(n)適用於需要進行大量增添/刪除元素操作 而對訪問元素無要求的程式
簡述沉入樁和灌注樁各有那些優缺點 各自適用於什麼條件
沉入樁一般為錘擊樁和靜力壓樁和振動壓樁幾種,灌注樁一般為鑽孔灌注樁 機械挖孔灌注樁和人工挖孔樁幾種。由於每一種樁的施工方法與工藝不同,所以決定了它們各自的特點。沉入樁一般適用於地基較軟的軟土層 粘土層以及砂性土層等等,但不適合地基岩層較硬或者有孤石存在的地質條件。而錘擊樁因為是蒸汽擊打噪聲較大所以比...
簡述幹法上樣和溼法上樣的優缺點
一 溼法施工優缺點 1 砂漿經過幾次凍融迴圈和風化易產生滲漏,甚至脫落 經雨水沖刷,潮溼的鹼性環境,長時間作用於瓦體會降低瓦的顏色等效能 2 瓦片安裝效能差,屋面的平整度不易控制,施工進度慢,易受天氣影響工期不易保證 3 砂漿汙染屋面影響整體立面效果 4 容易產生熱橋效應,不利於節能。二 幹法施工優...
試比較順序儲存結構和鏈式儲蓄結構的優缺點,在什麼情況下用順序表比連結串列好
荔枝將軍 順序儲存時,相鄰資料元素的存放地址也相鄰 邏輯與物理統一 要求記憶體中可用儲存單元的地址必須是連續的。優點 儲存密度大 1?儲存空間利用率高。缺點 插入或刪除元素時不方便。鏈式儲存時,相鄰資料元素可隨意存放,但所佔儲存空間分兩部分,一部分存放結點值,另一部分存放表示結點間關係的指標 優點 ...