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。線性表的當前長度...