線性表(list
):零個或多個資料元素的有限序列。
元素之間是有順序的,若元素存在多個,則第乙個元素無前驅,最後乙個元素無後繼,其他每個元素都有且只有乙個前驅和後繼。
線性表強調是有限的
。在較複雜的線性表中,乙個資料元素可以由若干個資料項組成。
線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表的資料元素。
描述順序儲存結構需要三個屬性:
儲存空間的起始位置:陣列data
,它的儲存位置就是儲存空間的儲存位置。
線性表的最大儲存容量:陣列長度maxsize
。線性表的當前長度:length
。在任意時刻,線性表的長度應該小於等於陣列的長度。
儲存器中的每個儲存單元都有自己的編號,這個編號稱為位址。
時間複雜度
:它的訪問時間效能為o(1)
。我們通常把具有這一特點的儲存結構稱為隨機訪問結構。
特點:
線性表的順序儲存結構,在存、讀資料時,不管是哪個位置,時間複雜度都是o(1)
;而插入或刪除時,時間複雜度都是
o(n)
。這就說明,它比較適合元素個數不太變化,而更多是訪問資料的應用。
現在鏈式結構中,除了要存資料元素資訊外,還要儲存它的後繼元素的儲存位址。
為了表示每個資料元素ai
與其直接後繼資料元素
ai+1
之間的邏輯關係,對資料元素
ai來說,除了儲存其本身的資訊之外,還需儲存乙個指示其直接後繼的資訊(即直接後繼的儲存位置)。我們把儲存資料元素資訊的域稱為
資料域,把儲存直接後繼位置的域稱為指標域。指標域中儲存的資訊稱做指標或鏈。這兩部分資訊組成資料元素ai
的儲存映像,稱為
結點(node
)。n個結點(
ai的儲存映像)鏈結成乙個鍊錶,即為線性表(
a1,a2,...,an
)的鏈式儲存結構,因為此鍊錶的每個結點中只包含乙個指標域,所以叫做
單鏈表。
我們把鍊錶中第乙個結點的儲存位置叫做頭指標
,線性鍊錶的最後乙個結點指標為「空」(通常用null或「^
」符號表示)。
有時,我們為了更加方便地對鍊錶進行操作,會在單鏈表的第乙個結點前附設乙個結點,稱為頭結點。頭結點的資料域可以不儲存任何資訊
,也可以儲存如線性表的長度等附加資訊,頭結點的指標域儲存指向第乙個結點的指標。
頭指標與頭結點的異同點
單鏈表的讀取,其主要核心思想就是「工作指標後移」。
單鏈表插入和刪除演算法,我們發現,它們其實都是由兩部分組成:第一部分就是遍歷查詢第i
個結點;第二部分就是插入和刪除結點。我們很容易推導出:它們的時間複雜度都是
o(n)
。如果在我們不知道第
i個結點的指標位置,單鏈表資料結構在插入和刪除操作上,與線性表的順序儲存結構是沒有太大優勢的。我們只需要在第一次時,找到第
i個位置的指標,此時為
o(n)
,接下來只是簡單地通過賦值移動指標而已,時間複雜度都是
o(1)
。顯然,對於插入或刪除資料越頻繁的操作,單鏈表的效率優勢就越是明顯。
單鏈表結構和順序儲存結構做對比:
把這種用陣列描述的鍊錶叫做靜態鍊錶(
游標實現法)。
靜態鍊錶的優缺點:
總的來說,靜態鍊錶其實是為了給沒有指標的高階語言設計的一種實現單鏈表能力的方法。
迴圈鍊錶解決了乙個很麻煩的問題:如何從當中乙個結點出發,訪問到鍊錶的全部結點。
將單鏈表中終端結點的指標端由空指標改為指向頭結點,就使整個單鏈表形成乙個環,這種頭尾相接的單鏈表稱為單迴圈鍊錶,簡稱迴圈鍊錶(circular linked list
)。雙向鍊錶(double linkedlist
)是在單鏈表的每個結點中,再設定乙個指向其前驅結點的指標域。
總結:
借用作者一句話共勉:不怕苦,吃苦半輩子,怕吃苦,吃苦一輩子。
《大話資料結構》讀書筆記(三)
零個或多個資料元素的有限序列。線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表的資料元素。c語言描述線性表的順序儲存結構 描述順序儲存結構需要三個屬性 儲存空間的起始位置 陣列data,它的儲存位置就是儲存空間的儲存位置。線性表的最大儲存容量 陣列長度maxsize 線性表的當前長...
大話資料結構讀書筆記
第一章 資料結構的定義 資料就夠是相互直接存在一種或多種特定關係的資料元素的集合 邏輯結構 集合結構 線性結構 樹形結構 圖形結構 第二章 演算法 1 演算法的特性 輸入 輸出 有窮性 確定性和可行性 2 演算法事假複雜度定義 在進行演算法分析時,語句總的次數t n 第三章1 線性表 定義 零個或多...
大話資料結構 讀書筆記
是相互之間存在一種或多種特定關係的資料元素的集合。說白了就是資料的集合 但是集合裡面的資料之間存在特地的關係 這翻譯得好像沒說一樣 是指資料元素之間的相互關係 指資料的邏輯結構在計算機儲存形式 鏈式儲存結構 是把資料元素存放在任意的儲存單元 這組儲存單元可以是連續的 也可以是不連續的 資料型別指的是...