1. 程式人生 > >順序表和連結串列的優缺點(區別、特點)詳解

順序表和連結串列的優缺點(區別、特點)詳解

順序表連結串列由於儲存結構上的差異,導致它們具有不同的特點,適用於不同的場景。本節就來分析它們的特點,讓讀者明白 "在什麼樣的場景中使用哪種儲存結構" 更能有效解決問題。

通過系統地學習順序表和連結串列我們知道,雖然它們同屬於線性表,但資料的儲存結構有本質的不同:
  • 順序表儲存資料,需預先申請一整塊足夠大的儲存空間,然後將資料按照次序逐一儲存,資料之間緊密貼合,不留一絲空隙,如圖 1a) 所示;
  • 連結串列的儲存方式與順序表截然相反,什麼時候儲存資料,什麼時候才申請儲存空間,資料之間的邏輯關係依靠每個資料元素攜帶的指標維持,如圖 1b) 所示;
順序表和連結串列的儲存結構對比
圖 1 順序表和連結串列的儲存結構對比
基於不同的儲存結構,順序表和連結串列有以下幾種不同。

開闢空間的方式

順序表儲存資料實行的是 "一次開闢,永久使用",即儲存資料之前先開闢好足夠的儲存空間,空間一旦開闢後期無法改變大小(使用動態陣列的情況除外)。

而連結串列則不同,連結串列儲存資料時一次只開闢儲存一個節點的物理空間,如果後期需要還可以再申請。

因此,若只從開闢空間方式的角度去考慮,當儲存資料的個數無法提前確定,又或是物理空間使用緊張以致無法一次性申請到足夠大小的空間時,使用連結串列更有助於問題的解決。

空間利用率

從空間利用率的角度上看,順序表的空間利用率顯然要比連結串列高。

這是因為,連結串列在儲存資料時,每次只申請一個節點的空間,且空間的位置是隨機的,如圖 2 所示:

連結串列結構易產生碎片
圖 2 連結串列結構易產生碎片
這種申請儲存空間的方式會產生很多空間碎片,一定程式上造成了空間浪費。不僅如此,由於連結串列中每個資料元素都必須攜帶至少一個指標,因此,連結串列對所申請空間的利用率也沒有順序表高。

空間碎片

,指的是某些容量很小(1KB 甚至更小)以致無法得到有效利用的物理空間。

時間複雜度

解決不同型別的問題,順序表和連結串列對應的時間複雜度也不同。

根據順序表和連結串列在儲存結構上的差異,問題型別主要分為以下 2 類:
  1. 問題中主要涉及訪問元素的操作,元素的插入、刪除和移動操作極少;
  2. 問題中主要涉及元素的插入、刪除和移動,訪問元素的需求很少;

第 1 類問題適合使用順序表。這是因為,順序表中儲存的元素可以使用陣列下標直接訪問,無需遍歷整個表,因此使用順序表訪問元素的時間複雜度為 O(1);而在連結串列中訪問資料元素,需要從表頭依次遍歷,直到找到指定節點,花費的時間複雜度為 O(n)
;

第 2 類問題則適合使用連結串列。連結串列中資料元素之間的邏輯關係靠的是節點之間的指標,當需要在連結串列中某處插入或刪除節點時,只需改變相應節點的指標指向即可,無需大量移動元素,因此連結串列中插入、刪除或移動資料所耗費的時間複雜度為 O(1);而順序表中,插入、刪除和移動資料可能會牽涉到大量元素的整體移動,因此時間複雜度至少為 O(n);

綜上所述,不同型別的場景,選擇合適的儲存結構會使解決問題效率成倍數地提高。

相關推薦

順序連結串列優缺點區別特點

順序表和連結串列由於儲存結構上的差異,導致它們具有不同的特點,適用於不同的場景。本節就來分析它們的特點,讓讀者明白 "在什麼樣的場景中使用哪種儲存結構" 更能有效解決問題。 通過系統地學習順序表和連結串列我們知道,雖然它們同屬於線性表,但資料的儲存結構有本質的不同: 順序表儲存資料,需預先申請一整塊足夠

順序連結串列Sqlist&LNode

寫在前面的廢話:這是應某人(不點名)的煽風點火整理來的一篇關於線性表中順序表和連結串列的區別 ——————————————————————————————————————————— 眾所周知,線性表是一個比較靈活的儲存空間,其中有兩種儲存格式:線性表和連結串列,下文儘量詳

C++模板的實現模板函式模板類,附帶模板實現順序連結串列程式碼

模板  當我們實現一個交換函式時,我們可以寫成如下。 void Swap(int& x, int& y) { int tmp = x; x = y; y = tmp; }  這裡只能交換兩個整數,當我們

資料結構-------線性..順序..連結串列..順序連結串列區別聯絡(1)

線性表:        線性表是N個具有相同特性的資料元素的有限序列 .線性表是一種在實際中廣泛使用的資料結構,常見的線性表:順序表..連結串列...棧...佇列...字串... 線性表在邏輯上是線性結構,也就說是連續的一條直線,但是在物

資料結構的基本概念 與順序連結串列區別

 1.資料:就是符號  輸入到計算機被計算機加工處理的符號的集合   特點:輸入到計算機  可以被計算機加工處理  2.資料結構把資料分為:數值型別和非數值型別   3.資料元素:組成資料基本元素  

比較順序連結串列優缺點,說說它們分別在什麼場景下使用?

順序表:記憶體中地址連續,優點是隨機訪問比較便捷快速,建立也比較簡單,隨機查詢比較方便,可以直接給出下標,排序也方便簡單。                 缺點是不夠靈活,刪除增加的工作量叫大,比較麻煩,長度不能實時變化 適用場景:適用於需要大量訪問元素的 而少量增

比較順序連結串列優缺點

線性表分為順序表和連結串列,連結串列又分為單鏈表,雙向連結串列和迴圈連結串列。對於連結串列的結構又分為帶頭連結串列和不帶頭連結串列。 一,順序表 定義:將表中元素一個接一個的存入一組連續的儲存單元中,這種儲存結構是順序結構。採用順序儲存結構的線

順序連結串列的清空,銷燬,建構函式

一.建構函式 在定義物件時呼叫建構函式,建構函式是用來建立一個空表 1.順序表建構函式 len,size,elem,這仨合起來看作是表的頭目,呼叫建構函式首先為這個“頭目”這仨資料分配空間,表的元素有沒有空間分配要看m的值。 ↓主要是關於空間的分

模板實現順序連結串列

順序表的實現:"Seqlist.h"  #pragma once template<class T> class Seqlist { private: T* _array; size_t _size; size_t _capacity; public:

資料結構:順序連結串列的簡單操作

用陣列正序初始化連結串列 初始定義 #include <cstdlib> #include <iostream> using namespace std; typedef int ElemType; typedef int Status;

順序連結串列拷貝構造

簡單一部 #include <iostream> #define DATA int class SXB { int size; int len; DATA* p; public: SXB(const SXB& that) // 拷貝

線性的兩種實現 -- 順序連結串列(C++)

線性表抽象類宣告 #ifndef ADT_H #define ADT_H //線性表ADT template <typename E> class List{ private: v

爬蟲原理與會話保持cookiessession--python實現

一、爬蟲原理     我們知道網際網路是由大量計算機和網路構成的複雜系統,我們可以將其形象的比喻成一張蜘蛛網。網路的節點是計算機,計算機中儲存著大量的資料。爬蟲程式就是通過網路去採集指定計算機中資料的工具。一般來說,我們採集的資料大多是網頁上的資料,

JDBC 資料庫連線池DBCPC3P0

前言   這段時間狀態有一點浮躁,希望自己靜下心來。還有特別多的東西還沒有學懂。需要學習的東西非常的多,加油! 一、JDBC複習   Java Data Base Connectivity,java資料庫連線,在需要儲存一些資料,或者拿到一些資料的時候,就需要往

順序儲存結構與鏈式儲存結構的比較也可以說的順序連結串列的比較

1、鏈式儲存結構的儲存空間在邏輯上是連續的,但是在物理上是離散的;而順序儲存結構的儲存空間在邏輯上是連續的,在物理上也是連續的。 2、鏈式儲存儲存密度小,但空間利用率較高;順序儲存儲存密度大,但空間利用率較低。 3、順序結構優點是可以隨機讀取元素,缺點是插入和刪除元素要移動大量元素,

josephus環的實現順序連結

josephus環問題是資料結構中一個常見的例項:假設有n個人做成一圈,現在要求從第k個人開始報數,報道m的人退出。然後從下一個人繼續從頭報數,並按相同的規則退出, 直到所有的退出。還有就是要按退出的順序打印出出列人的編號。 其實看到這個“一圈”,我第一瞬間就想到了用迴圈連結串列,也

資料結構-第一章,順序連結串列,棧結構,佇列結構的關係個人見解

首先 順序表  和 連結串列是 兩個儲存結構。分別有自己的儲存特點。 其次 順序表 和 連結串列分別存放在不同的地方,“這個地方”就是 “棧” 或者 “佇列” 了 其實就是按照   FIFO先進先出 和  FILO先進後出 來處理資料所區別。 {{{而對於 FIFO 呢

資料結構順序連結串列

順序表 運用陣列結構來構建的線性表就是順序表。 本例實現了順序表的列印、清空、判斷是否為空、求表長、獲得指定下標的元素、獲得指定元素的下標、插入和刪除操作。 #include<iostream> const int MAXSIZE=100; using

順序連結串列

順序表——將表中元素一個接一個的存入一組連續的儲存單元中,這種儲存結構是順序結構。 利用陣列單元的物理位置上的 優點:儲存空間連續,允許元素隨機訪問;缺點:長度固定,在分配記憶體之前要先確定好陣列長度,致使可能造成空間浪費;   單鏈表——用一組任意的儲存單元存放線性表的元素,只包

【資料結構週週練】001順序連結串列

目錄 前言 1、題目 2、程式碼 1、題目 2、程式碼 1、題目 2、程式碼 前言 從這周開始,我會不定期發一些資料結構練習題,一方面,提升自己的程式設計能力,給自己考研程式碼題打基礎,雖然邏輯都明白,但是一次性寫對程式碼還是有問題,