大話資料結構(第三章 線性表)

2022-08-02 01:51:09 字數 2628 閱讀 1675

線性表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 有且僅有乙個直接後繼,當...