資料結構與演算法學習筆記 線性表(2)

2021-09-11 19:18:38 字數 2883 閱讀 7014

2.2.1線性表的順序儲存

用這種方法儲存的線性表簡稱順序表

順序儲存的線性表的特點:

設每個元素需占用/個儲存單元,以所佔的第乙個單元的儲存位址作為資料元素的儲存位置。則線性表中第i+1個資料元素的儲存位置loc(ai+1)和第i個資料元素的儲存位置loc(ai)之間滿足下列關係:

​ loc(ai+1) = loc(ai)+ /

線性表的第i個資料元素ai的儲存位置為:

​ loc(ai) = loc(a1)+(i-1)* /

訪問結構:訪問結構是在乙個資料結構上對查詢操作的時間效能的一種描述

#define max_size 100

typedef

int status;

typedef

int elemtype;

typedef

struct sqlistsqlist;

​ (2)動態結構:可以擴充,新的大小計入資料成員maxsize中

typedef

struct sqlistsqlist;

順序線性表的插入

實現步驟:

(1)將線性表l中的第i個至第n個結點後移乙個位置;

(2)將結點e插入到結點ai-1之後;

(3)線性表長度加1。

如下圖所示:

;/* i-1位置以後的所有結點後移 */

l->elem_array[i-1]

= e;

/* 在i-1個位置插入 */

l->length++

;return ok;

}時間複雜度分析

線性表l中的第i個元素之前插入新結點,結點的移動次數來估計演算法的時間複雜度。

總的平均移動次數:e(insert) = ε pi *(n-i+1)(1<=i<=n)

​ 所以:e(insert) = n / 2 。

即在順序表上做插入運算,平均要移動表上的一半結點。當表長n較大時,演算法的效率相當低。

因此演算法的平均時間複雜度為o(n)。

順序線性表的刪除

​ l = (a1,…,ai-1,ai+1,…,an)

實現步驟:

(1)將線性表l中的第i + 1個至第n個結點依次向前移動乙個位置。

(2)線性表長度減1。

如下圖所示:

}時間複雜度分析

總的平均移動次數:e(delete)= ε pi * (n-i) (1<=i<=n)

​ 所以:e(delete)= (n-1)/ 2。

即在順序表上做刪除運算,平均要移動表上一半 結點。當表長n較大時,演算法的效率相當低。

因此演算法的平均時間複雜度為o(n)。

順序線性表的查詢定位刪除

實現步驟:

(2)將從找到的位置至最後乙個結點依次向前移動乙個位置。

(3)線性表長度減1。

status locate_delete_sqlist

(sqlist *l,elemtype x)

/*刪除線性表中值為x的第乙個結點*/

if(i>l->length)

return ok;

}}

時間複雜度分析-資料元素的比較和移動操作

​ 比較的平均次數:e(compare) = ε pi * i (1<=i<=n)

​ 所以:e(compare) = (n + 1)/ 2。

​ 刪除時平均移動次數:e(delete)= ε pi * (n - 1) (1<=i<=n)

​ 所以:e(delete)= (n-1) / 2。

平均時間複雜度:e(compare)+ e(delete) = n,即為o(n)。

例1:線性表的合併問題

已知順序表la和lb中的資料元素按值非遞減有序排列,現要將la和lb歸併為乙個新錶lc,且lc中的資料元素仍按值非遞減有序排列。

la = (3,5,8,9) lb = (2,6,9,11,15,20)

lc = (2,3,5,6,8,9,9,11,15,20)

/*部分核心***/

void

mergelist

(sqlist la,sqlist lb,sqlist *lc)

12.while

(pa<=pa_last)

*pc++

=*pa++

;13.

while

(pb<=pb_last)

*pc++

=*pb++

;}

資料結構與演算法學習筆記 線性表(1)

2.1線性表的定義和基本操作 線性表是一種典型的線性結構。線性表 linear list 是由n n 0 個資料元素 結點 a1,a2,an組成的有限序列。所有節點具有相同的資料型別。資料元素的個數n稱為線性表的長度。若線性表中的結點是按值由小到大 或大到小 排列的,稱線性表是有序的。線性表是一種相...

資料結構 筆記2 線性表

線性表是最簡單,最常用的一種資料結構,它是由n個資料元素 結點 組成的有限序列。線性表的基本運算 1.置空表 initlist l 構造乙個空的線性表l 2.求表長 listlength l 返回線性表l中元素個數,即表長。3.取表中第i個元素getnode l,i 若1 i listlength ...

資料結構與演算法導論2 線性表

define maxsize 20 typedef int elemtype typedef struct sqlist 總結下,順序儲存結構封裝需要三個屬性 儲存空間的起始位置,陣列data,它的儲存位置就是線性表儲存空間的儲存位置。線性表的最大儲存容量 陣列的長度maxsize。線性表的當前長度...