第三章
線性表3.1 線性表的定義
線性表:零個或多個資料元素的有限序列。
說明:線性表是乙個序列。也就是說,元素之間是有順序的,若元素存在多個,則第乙個元素無前驅,最後乙個元素無後繼,其他每個元素都有且只有乙個前驅和後繼。
線性表強調是有序的。
3.2 線性表的順序儲存結構
3.2.1 順序儲存定義
線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表的資料元素。
3.2.2 順序儲存方式
順序儲存結構需要有三個特性:
1)儲存空間的起始位置;
2)線性表的最大儲存容量;
3)線性表的當前長度。
3.2.3 陣列長度和線性表長度的區別
陣列長度:存放線性表的儲存空間的長度,儲存分配後這個量一般是不變的;
線性表長度:線性表中資料元素的個數,隨著線性表插入和刪除操作的進行,這個量是變化的。
隨機儲存結構:隨機訪問就是直接訪問,可以通過下標直接訪問的那種資料結構,與儲存位置無關,例如陣列。
3.3 順序儲存結構的插入和刪除
3.3.1 插入操作
插入演算法的思路:
·如果插入位置不合理,丟擲異常;
·如果線性表長度大於等於陣列長度,則丟擲異常或動態增加容量;
·從最後乙個元素開始向前遍歷到第
i個位置,分別將它們都向後移動乙個位置;
·將要插入元素填入位置i處;
·表長加
1.3.3.2 刪除操作
刪除操作的思路:
·如果刪除位置不合理,丟擲異常;
·取出刪除元素;
·從刪除元素位置開始遍歷到最後乙個元素位置,分別將它們都向前移動乙個位置;
·表長減
1.3.3.3 線性表順序儲存結構的優缺點
優點:·無須為表示表中元素之間的邏輯關係而增加額外的儲存空間;
·可以快速地訪問表中任一位置的元素(時間複雜度為
o(1)).
缺點:·插入和刪除操作需要移動大量元素;
·當線性表長度變化較大時,難以確定儲存空間的容量;
·造成儲存空間的「碎片
」。3.4 線性表的鏈式儲存結構
線性表鏈式儲存結構定義:
為了表示每個資料元素ai與其直接後繼資料元素
ai+1
之間的邏輯關係,對資料元素
ai來說,除了儲存其本身的資訊之外,還需儲存乙個指示其直接後繼的資訊(即直接後繼的儲存位置)。我們把儲存資料元素資訊的域稱為資料域,把儲存直接後繼位置的域稱為指標域。指標域中儲存的資訊稱作指標或鏈。這兩部分資訊組成資料元素
ai的儲存映像,成為結點(
node
)。如果乙個鍊錶的每個結點中只包含乙個指標域,則叫做單鏈表。
我們把鍊錶中第乙個結點的儲存位置叫做頭指標。
有時為了更加方便的對鍊錶進行操作,會在單鏈表的第乙個結點前附設乙個結點,稱為頭結點。
3.5 單鏈表的整表建立
頭插法:
尾插法:
3.6 單鏈表結構與順序儲存結構優缺點
結論:·若線性表需要頻繁查詢,很少進行插入和刪除操作時,宜採用順序儲存結構。若需要頻繁插入和刪除時,宜採用單鏈表結構。
·當線性表中的元素個數變化較大或者根本不知道有多大時,最好用單鏈表結構,這樣可以不需要考慮儲存空間的大小問題。
3.7 靜態鍊錶
概念:用陣列描述的鍊錶叫做靜態鍊錶。
陣列的第乙個元素,即下標為0的元素的
cur就存放備用鍊錶的第乙個結點的下標;而陣列的最後乙個元素的
cur;
則存放第乙個有數值的元素的下標,相當於單鏈表的頭節點作用,當整個鍊錶為空時,則為0,表示無指向。
現在如果我們需要在「乙」和
「丁」之間插入乙個值為「丙
」的元素,只需要將「乙
」的cur改為
7,表示下一位是「丙
」,並將「丙
」的cur改為
3,表示下一位是丁。如圖
3-12-3
所示。現在如果我們刪除了第乙個元素「甲
」,表示現在「甲
」這個位置空出來了,如果未來有新人要來則優先考慮這裡,所以刪除的位置成為第乙個優先空位,即首元素的
cur為
1, 第乙個元素位置的
cur改為
8,而下標為
8的位置
cur改為
9,最後元素位置的
cur改為
2,如圖
3-12-4
所示。
靜態鍊錶的優缺點:
靜態鍊錶在插入和刪除操作時不需要移動元素,只需要修改游標,從而改進了在順序儲存結構中插入和刪除操作需要移動
大量元素的缺點;但並沒有解決連續分配儲存帶來的表長難以確定的問題;並且失去了順序儲存結構隨機訪問的特性。
3.8 迴圈鍊錶
將單鏈表中終端結點的指標端由空指標改為指向頭結點,就使整個單鏈表形成乙個環,這種頭尾相接的單鏈表稱為單迴圈鍊錶,簡稱迴圈鍊錶(circular linked list)。
3.9 雙向鍊錶
雙向鍊錶(double linked list)是在單鏈表的每個結點中,再設定乙個指向其前驅結點的指標域。
《大話資料結構》之線性表
自己在看 大話資料結構 這本書,順便需要練習使用部落格,就順便把自己的讀書筆記發上來啦。線性表 list 零個或多個 相同型別的 資料元素的有限序列。順序儲存定義 線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表的資料元素。順序儲存方式 線性表的順序儲存結構就是在記憶體中找了塊地兒...
《大話資料結構》 線性表
created by pengxiangzhou on 2021 1 24.include ifndef c ds linear list h define c ds linear list h endif c ds linear list h 線性表 順序儲存結構 順序儲存結構的三個屬性 陣列da...
大話資料結構 線性表
線性表是零個或多個資料元素的有限序列。線性表的抽象資料型別定義如下 adt 線性表 list data 線性表的資料物件集合為,每個元素的型別均為datatype。其中,除第乙個元素a1外,每乙個元素有且只有乙個直接前驅元素,除了最後乙個元素an外,每乙個元素有且只有乙個直接後繼元素。資料元素之間的...