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 ...