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

2021-09-11 18:35:18 字數 1689 閱讀 1893

2.1線性表的定義和基本操作

線性表是一種典型的線性結構。

線性表(linear list):是由n(n>=0)個資料元素(結點)a1,a2,…,an組成的有限序列。

所有節點具有相同的資料型別。

資料元素的個數n稱為線性表的長度。

若線性表中的結點是按值由小到大(或大到小)排列的,稱線性表是有序的。

線性表是一種相當靈活的資料結構,其長度可根據需要增長或縮短。

對線性表的資料元素可以訪問,插入和刪除。

線性表的抽象資料型別定義:

​ 初始條件:線性表l已存在;

​ 操作結果:若l為空表,則返回true,否則false

getelem(l,i,&e)

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

​ 操作結果:用e返回l中的第i個資料元素的值;

listinsert(l,i,&e)

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

locelem(la,e,equal())

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

例1 假設:有兩個集合a和b分別用兩個線性表la和lb表示,即:線性表中的資料元素即為集合中的成員。現要求乙個新的集合a = a∪b。

上述問題可演繹為如下操作:

操作步驟:

從線性表lb中依次檢視每個資料元素;

getelem(lb,i)➡e

locelem(la,e,equal())

若不存在,則插入。

listinsert(la,n+1,e)(n表示線性表la當前長度)

void

union

(list la,list lb)

//union

}

例2 歸併兩個「其資料元素按值非遞減有序排列」的有序表la和lb,求得有序表lc也具有相同特性。

la = (3,5,8,11)

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

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

操作步驟:

初始化lc為空表;

分別從la和lb中取得當前元素ai和bj;

若ai<=bj;則將ai插入到lc中,否則將bj插入到lc中;

重複2和3兩步,直至la或lb中元素被取完為止;

將la表或lb表中剩餘元素複製插入到lc表中。

void

mergelist

(list la,list lb,list lc)

//如果ai<=bj,則把ai插入到lc中,然後將i移動到下一位

else

//否則,把bj插入到lc中,然後將j移動到下一位

while

(i<=la_len)

while

(j<=lb_len)

//結束

}//mergelist

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

2.2.1線性表的順序儲存 用這種方法儲存的線性表簡稱順序表 順序儲存的線性表的特點 設每個元素需占用 個儲存單元,以所佔的第乙個單元的儲存位址作為資料元素的儲存位置。則線性表中第i 1個資料元素的儲存位置loc ai 1 和第i個資料元素的儲存位置loc ai 之間滿足下列關係 loc ai 1 ...

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

時間複雜度與空間複雜度 時間複雜度即執行時間的需求,空間複雜度即對空間的需求線性表 線性表記為 a1,a2,ai 1,ai,ai 1,an 則ai 1為ai的直接前驅元素,ai 1為ai的直接後繼元素,存在多個元素的前提下,第乙個元素無前驅,最後乙個元素無後繼,其他元素都有且只有乙個前驅和乙個後繼。...

資料結構與演算法基礎 線性表(1)

線性表是具有相同特性的資料元素的乙個有限序列。線性表的邏輯特徵 例1 一元多項式 pn x p0 p1x p2x2 p3x3 pnxn.線性表p p0,p1,p2,p3,pn 每一項的指數 i 都隱藏其係數的pi的序號中 如 p x 5 6x 2x2 3x3.那麼我們可以用陣列來表示。指數 下標i ...