線性表是零個或多個資料元素的有限序列。
線性表的抽象資料型別定義如下:
adt 線性表(list)data
線性表的資料物件集合為,每個元素的型別均為datatype。其中,除第乙個元素a1外,每乙個元素有且只有乙個直接前驅元素,除了最後乙個元素an外,每乙個元素有且只有乙個直接後繼元素。資料元素之間的關係是一對一的關係。
operation
initlist(*l): 初始化操作,建立乙個空的線性表l。
listempty(l): 若線性表為空,返回true,否則返回false。
clearlist(*l): 將線性表清空。
getelem(l,i,*e): 將線性表l中的第i個位置元素值返回給e。
listdelete(*l,i,*e): 刪除線性表l中第i個位置元素,並用e返回其值。
listlength(l): 返回線性表l的元素個數。
endadt
線性表的順序儲存結構
線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表的資料元素。
描述順序儲存結構需要三個屬性:1)儲存空間的起始位置;2)線性表的最大儲存容量;3)線性表的當前長度。
順序儲存結構時,線性表的訪問時間效能為o(1)。通常把具有這一特點的儲存結構稱為隨機訪問結構。
順序儲存結構線性表插入演算法思路:
1)如果插入位置不合理,丟擲異常;
2)如果線性表長度大於等於陣列長度,則丟擲異常或動態增加容量;
3)從最後乙個元素開始向前遍歷到第i個位置,分別將它們都向後移動乙個位置;
4)將要插入元素填入位置i處;
5)表長加1。
順序儲存結構線性表的刪除演算法思路:
1)如果刪除位置不合理,丟擲異常;
2)取出刪除元素;
3)從刪除元素位置開始遍歷到最後乙個元素位置,分別將它們都向前移動乙個位置;
4)表長減1。
順序儲存結構時,線性表插入刪除的時間複雜度是o(n)。
線性表順序儲存結構的優缺點:
優點:1)無須為表中元素之間的邏輯關係而增加額外的儲存空間;2)可以快速地訪問表中任一位置的元素。
缺點:1)插入和刪除操作需要移動大量元素;2)當線性表長度變化較大時,難以確定儲存空間的容量;3)造成儲存空間的「碎片」。
線性表的鏈式儲存結構
為了表示每個資料元素ai與其直接後繼資料元素ai+1之間的邏輯關係,對資料元素ai來說,除了儲存其本身的資訊之外,還需儲存乙個指示其直接後繼的資訊(即直接後繼的儲存位置)。我們把儲存資料元素資訊的域稱為資料域,把儲存直接後繼位置的域稱為指標域。指標域中儲存的資訊稱做指標或鏈。這兩部分資訊組成資料元素ai的儲存映像,稱為節點。
鏈式儲存結構線性表讀取演算法的思路:
1)宣告乙個指標p指向鍊錶第乙個結點,初始化j從1開始;
2)當j3)若到鍊錶末尾p為空,則說明第i個節點不存在;
4)否則查詢成功,返回結點p的資料。
鏈式儲存結構線性表插入演算法的思路:
1)宣告一指標p指向煉表頭節點,初始化j從1開始;
2)當j3)若到鍊錶末尾p為空,則說明第i個節點不存在;
4)否則查詢成功,在系統中生成乙個空結點s;
5)將資料元素e賦值給s->data;
6)單鏈表的插入標準語句s->next=p->next, p->next=s;
7)返回成功。
鏈式儲存結構線性表刪除演算法的思路:
1)宣告一指標p指向煉表頭指標,初始化j從1開始;
2)放j<1時,就遍歷鍊錶,讓p的指標向後移動,不斷指向下乙個結點,j累加1;
3)若到鍊錶末尾p為空,則說明第i個節點不存在;
4)否則查詢成功,將欲刪除的結點p->next賦值給q;
5)單鏈表的刪除標準語句p->next=q->next;
6)將q結點中的資料賦值給e,作為返回;
7)釋放q結點;
8)返回成功。
對於插入或刪除資料越頻繁的操作,單鏈表的效率優勢就越是明顯。
鏈式儲存結構線性表刪除演算法的思路:
1)宣告一結點p和q;
2)將第乙個結點賦值給p;
3)迴圈:
將下一結點賦值給q;(遺囑)
釋放p;
將q賦值給p。
順序儲存和鏈式儲存的選擇?
1)若線性表需要頻繁查詢,很少進行插入和刪除操作時,宜採用順序儲存結構。
2)當線性表中的元素個數變化較大或者根本不知道有多大時,最好用鏈式儲存結構,這樣可以不需要考慮儲存空間的大小問題。
靜態鍊錶:用陣列描述的鍊錶。
優點:在插入和刪除操作時,只需要修改游標,不需要移動元素,從而改進了在順序儲存結構中的插入和刪除操作需要移動大量元素的缺點。
缺點:1)沒有解決連續儲存分配帶來的表長難以確定的問題;2)失去了順序儲存結構隨機訪問的特性。
總的來說,靜態鍊錶其實是為了給沒有指標的高階語言設計的一種實現單鏈表能力的方法。
迴圈鍊錶
將單鏈表中終端結點的指標端由空指標改為指向頭結點,就使整個單鏈表形成乙個環,這種頭尾相接的單鏈表稱為單迴圈鍊錶,簡稱迴圈鍊錶。
雙向鍊錶
雙向鍊錶是在單鏈表的每個結點中,再設定乙個指向其前驅結點的指標域。
《大話資料結構》 線性表
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...
大話資料結構 線性表 2
線性表的順序儲存結構最大的缺點是插入和刪除時需要移動大量資料,這顯然就需要消耗時間。本節討論的鏈式儲存結構可以很好滴解決這個問題。線性表的鏈式儲存結構的特點是用一組任意的儲存單元儲存線性表的資料元素,這些儲存單元可以使連續的,也可以是不連續的。這就意味著,這些資料元素可以存在記憶體未被占用的任意位置...
大話資料結構 線性表 3
順序儲存結構的建立,其實就是乙個陣列的初始化,即宣告乙個型別和大小的陣列並賦值的過程。而單鏈表和順序儲存結構就不一樣,他不像順序儲存結構那麼集中,他可以很分散,是一種動態結構。對於每個鍊錶來說,它所占用空間的大小和位置是不需要預先分配劃定的,可以根據系統的情況和實際的需求即時生成。所以,建立單鏈表的...