資料結構與演算法(三) 線性表一

2022-08-10 07:21:10 字數 2590 閱讀 6314

線性表(list):由零個或多個資料元素組成的有限序列

資料型別:是指一組性質相同的值的集合及定義在此集合上的一些操作的總稱

例如在c語言中按照取值不同,資料型別可以分為兩類:

原子型別:不可以再分解的基本型別,例如整型,浮點型,字元型

結構型別:由若干個型別組合而成,是可以再分解的,例如整型陣列

抽象:是指由取出事物具有的普遍性的本質,它要求抽出問題的特徵而忽略非本質的細節,是對具體事務的乙個概括

抽象資料型別:是指乙個數學模型及定義在該模型上的一組操作

描述抽象資料型別的標準格式:

adt 抽象資料型別名

data

資料元素之間邏輯關係的定義

operation

操作endadt

adt 線性表(list)

data

線性表的資料物件集合為,每個元素的型別均為datatype

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

線性表由兩種物理儲存結構:順序儲存結構和鏈式儲存結構指的是用一段位址連續的儲存單元依次儲存線性表的資料元素

【間隔i-1個儲存單元,間隔(i-1)*c個位址】

線性表順序儲存的結構**:

1

#define maxsize 20

2 typedef int

elemtype;

3 typedef struct

4 sqlist;

總結下,順序儲存結構封裝需要三個屬性:操作中用到的預定義常量和型別:

1

//函式結果狀態**

2#define true 1

3#define false 0

4#define ok 1

5#define error 0

6#define infeasible -1

7#define overflow -289

//status 是函式的型別,其值是函式結果狀態**,如ok等

10//

初始條件,順序線性表l已存在,1 <= i <=listlength(l)

1112 typedef int

status;

13 typedef char elemtype;

刪除操作,思路:

線性表順序儲存結構特性:

線性表順序儲存結構的優缺點:

缺點:用一組任意的儲存單元儲存線性表的資料元素,鍊錶中元素的物理位置和邏輯位置不一定相同。

頭指標和頭結點:

頭結點:是在鍊錶的首元結點之前附設的乙個結點

單鏈表圖例:

空鍊錶圖例:

單鏈表的插入,思路:

單鏈表的刪除,思路:

頭插法建立單鏈表,思路:

頭插法建立單鏈表示例

*/void createlisthead(linklist *l,int

n)

}分別從儲存分配方式時間效能空間效能三方面來做對比

插入和刪除

線性表的順序儲存結構和單鏈表結構各有其優缺點,不能簡單的說哪個好,哪個不好,需要根據實際情況,來綜合平衡採用哪種資料結構更能滿足和達到需求和效能

資料結構與演算法 三 線性表基礎

2.1 線性表的定義和基本操作 線性表是有序且有限的 2.1.2 存在乙個唯一的被稱為 第乙個 的資料元素 2.2.2 存在乙個唯一的被稱為 最後乙個 的資料元素 2.2.3 除了第乙個元素外,每個元素均有唯一乙個直接前驅 2.2.4 除了最後乙個元素外,每個元素均有唯一乙個直接後繼。線性表 lin...

資料結構與演算法筆記(三)線性表

是乙個由n的資料元素的有限序列,最常見的是鏈式表達也叫做線性鍊錶 鍊錶。再鍊錶中儲存的資料元素叫做節點,乙個節點儲存就是一條資料記錄。每個資料節點包括2部分,第乙個是資料值,第二個是指向下乙個節點的指標。在鍊錶的最前面,通常有乙個頭指標來指向第乙個節點,對鍊錶的最後乙個節點,沒有下乙個節點,它的指標...

資料結構 三 線性表

零個或多個資料元素的有限序列 在較複雜的線性表中,乙個資料元素可以由諾幹個資料項組成 結構 define listsize 100 線性表的最大長度 typedef int datatype typedef struct seqlist datatype是資料元素型別,可以根據需要定義,可以使用se...