線性表list:零個或者多個資料元素的有限序列。
特點:是乙個序列,有順序
線性表是有限的
線性表中,乙個元素的前面乙個元素稱之為直接前驅元素,後面的元素稱之為直接後繼元素。
線性表元素的個數為線性表的長度,沒有則是空表。
1、線性表的抽象資料型別。
adt 線性表
線性表的資料物件集合為,每乙個元素的資料型別均為datatype。其中,除了第乙個元素有且只有乙個直接先驅元素,除了最後乙個元素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的元素個數。
以上為線性表基本操作應用,根據具體的應用情況,有所增加新的操作。
2、線性表的順序儲存結構
1、順序儲存定義
線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表的資料元素。
2、順序儲存方式
描述順序儲存結構需要三個屬性:儲存空間的起始位置,線性表的最大儲存容量,線性表的當前長度
3、資料長度與線性表長度的區別
陣列的長度是存放線性表的儲存空間的長度,一般分配後這個值不變;
線性表的長度是線性表中資料元素的個數,隨著線性表插入和刪除操作的進行,這個量是變化的。
4、位址計算方法
計算機中陣列是從0開始
3、順序儲存結構的插入與刪除
線性表的順序儲存結構,進行getelem操作,很簡單,返回對應下標的值就行
插入操作,有異常丟擲異常,沒有則從最後乙個往前到i號,全部後退,然後插入,表長+1
刪除操作,刪除位置不合理,異常,否則,取出刪除元素,將後面的元素都前移,表長-1
插入的操作時間複雜度是o(n),刪除操作o(n)
線性表順序儲存結構的優先缺點
優點:快速訪問元素,使用的空間少緊湊
缺點,插入刪除需要移動大量元素,線性表長度變化大時,難以確定空間容量,會引起空間碎片
4、線性表的鏈式儲存結構
為了解決順序儲存結構,採用了鏈式儲存結構,可以解決大量資料元素移動問題
鏈式結構中,除了要儲存資料元素資訊外,還要儲存它的後繼元素位址
儲存的資料稱為資料域,儲存的直接後繼位置為指標域,這個表也叫作單鏈表
我們把鍊錶的第乙個節點儲存的位置叫做頭指標,那麼整個鍊錶的訪問就必須是從頭指標開始進行了,最後乙個節點的指標域儲存為「空」
有的時候為了更加方便對鍊錶進行操作,我們在第乙個節點前附設乙個節點,稱為頭節點,頭結點資料與可以不存任何東西。
頭指標:指向鍊錶第乙個節點,若煉表有頭結點,則指向頭結點的指標,無論鍊錶是否為空,頭指標均不為空。
頭節點:為了操作的統一和方便而設立,其資料域一般無意義;有了頭結點,第乙個元素前插入元素和刪除第乙個的操作就統一了;頭結點不是鍊錶所必須的。
若線性表為空表,則頭節點的指標域為「空」;
5、單鏈表的讀取
順序儲存結構中 找到任意乙個元素很容易,能夠計算好位置位址,但是在單鏈表中,第i元素的位址就不好知道了,必須從頭開始乙個個找過去,因此單鏈表的grtelem在演算法上進行實現,過程要麻煩一些。
6、但鍊錶的刪除與插入
插入節點,操作很簡單,只需要讓插入位置前乙個元素的指標域指向插入元素,插入元素的指標域指向下乙個元素即可。
比如節點p,p->next,插入點s。則:s->next = p->next;p->next = s;兩句話順序不可以反過來。
插入節點:先找到位置,再插入
刪除節點,直接上刪除節點的前乙個節點指向下下個節點即可
單鏈表裡面的刪除插入節點都是由兩部分組成,第一步找到位置;第二步進行操作;時間複雜度都是o(n)
7、單鏈表的整表刪除
準備兩個變數,依次把鍊錶元素乙個個賦值給這第二個變數,第二個變數不停的賦給第乙個變數,第乙個變數不停的釋放,依次把整個鍊錶釋放掉。
8、靜態鍊錶
c語言有指標,鍊錶可以想那樣操作。但是早起的一些高階語言沒有指標,比如basic、fortan等
沒法進行上述的鍊錶操作;
那麼有人就提出由陣列代替指標,定義陣列,陣列的每乙個元素由兩個資料域組成,data和cur。cur相當於單鏈表中的指標,用來存在元素的後繼在陣列中的下標;
我們把這種用陣列描述的鍊錶叫做靜態鍊錶,或者游標實現法。
陣列中第乙個元素和最優乙個元素作特殊處理,不存資料,陣列中未被使用的陣列元素稱之為備用鍊錶,而下標為0的元素的cur存放備用鍊錶的第乙個節點的下標,最後乙個元素存放第乙個有數值的元素的下標,相當於單鏈表中的頭結點作用。
9、迴圈鍊錶
將單鏈表中的終端節點的指標端由控指標改為指向頭結點,就使得整個鍊錶形成乙個環,這種頭尾相接的單鏈表稱為單迴圈鍊錶,簡稱迴圈鍊錶。
迴圈鍊錶的空表頭節點的指標裝自己位址
10、雙向鍊錶
在單鏈表中再增加乙個指向前驅節點的指標域。
插入和刪除時候,要多修改指標資料;
相比於單鏈表其實就是空間換取時間。
大話資料結構第三章 線性表
1.線性表 list 零個或多個資料元素的有限序列。線性元素的個數n n 0 定義為線性表的長度,當n 0時,稱為空表。2.在較複雜的線性表中,乙個資料元素可以由若干個資料項組成。4.描述順序儲存結構需要三個屬性 儲存空間的起始位置 陣列data,它的儲存位置就是儲存空間的儲存位置。線性表的最大儲存...
大話資料結構第三章 線性表
1.線性表 list 零個或多個資料元素的有限序列。線性元素的個數n n 0 定義為線性表的長度,當n 0時,稱為空表。2.在較複雜的線性表中,乙個資料元素能夠由若干個資料項組成。4.描寫敘述順序儲存結構須要三個屬性 儲存空間的起始位置 陣列data,它的儲存位置就是儲存空間的儲存位置。線性表的最大...
大話資料結構 第三章線性表(1)
僅作為筆記 線性表 list 零個或多個資料元素的有限序列。若線性表記為 a1,ai 1 ai ai 1 an 則表中 ai 1 領先於 ai,ai 領先於 ai 1,稱 ai 1 是 ai 的直接前驅元素,ai 1是 ai 的直接後繼元素。當 i 1,2,n 1 時,ai 有且僅有乙個直接後繼,當...