定義:由零個或多個資料元素組成的有序序列。
對定義的補充:
1.零個資料元素的線性表即為空表
2.按照定義,線性表首先是乙個序列,也就是說元素之間是有先來後到的順序的。
3.若元素存在多個,則第乙個元素無前驅,最後乙個元素無後繼,其他元素都有且只有乙個前驅和後繼。
4.線性表強調是有限的,事實上無論計算機發展到多強大,它所處理的元素都是有限的。
數學定義:線性表的抽象資料型別
operation例題:
先要實現兩個線性表a、b的並集操作,即使a=a∪b。
分析:只需要迴圈遍歷集合b中的元素,判斷b集合當前的元素是否在集合a中,若不在,則插入集合a中即可。因此需要用到幾個基本的操作組合:
listlength(l);得到線性表的長度。
getelem(l,i,*e);得到線性表中的元素,用e存放
locateelem(l,e);判斷線性表中是否存在與e相等的元素,若存在,返回元素序號;否則,返回0表示不存在。
listinsert(*l,i,e);插入
**實現:
void
union
(list *la,list lb)
}}
陣列從0開始計數,線性表從1開始計數。
線性表的順序儲存結構具有隨機儲存結構的特點,時間複雜度為o(1)。
線性表順序儲存的結構**:
#define maxsize 20
typedef
int elemtype;
typedef
struct
sqlist;
順序儲存結構封裝需要三個屬性:
實現getelem的具體**:
#define ok 1
#define error 0
#define true 1
#define false 0
typedef
int status;
// status 是函式的型別,其值是函式結果狀態**,如ok等
// 初始條件:順序線性表l已存在,1<=i<=listlength(l)
// 操作結果:用e返回l中第i個資料元素的值。
status getelem
(sqlist l,
int i,elemtype *e)
*e=l.data[i-1]
;return ok;
}
實現listinsert(*l,i,e)的演算法思路:
實現listinsert(*l,i,e)的具體**:
#define ok 1
#define error 0
#define true 1
#define false 0
typedef
int status;
// status 是函式的型別,其值是函式結果狀態**,如ok等
// 初始條件:順序線性表l已存在,1<=i<=listlength(l)
// 操作結果:在l中第i個位置之前插入新的資料元素e,l長度+1
status listinsert
(sqlist *l,
int i,elemtype e)
if(i<
1||i>l->length+1)
//當i不在範圍內時
if(i<=l->length)
//當插入資料位置不在表尾
} l->data[i-1]
=e;//若插入位置在表尾則直接插入
l->length++
;return ok;
}
實現listdelete的演算法思路:
實現listdelete的具體**:
#define ok 1
#define error 0
#define true 1
#define false 0
typedef
int status;
// status 是函式的型別,其值是函式結果狀態**,如ok等
// 初始條件:順序線性表l已存在,1<=i<=listlength(l)
// 操作結果:在l中第i個位置之前插入新的資料元素e,l長度+1
status listinsert
(sqlist *l,
int i,elemtype e)
if(i<
1||i>l->length)
//當i不在範圍內時
*e= l->data[i-1]
;if(ilength)
//當插入資料位置不在表尾
}
l->length--
;return ok;
}
插入和刪除的時間複雜度最好是o(1),最壞是o(n),取平均情況取中間值簡化後為o(n)
這就說明,它比較適合元素個數比較穩定,不經常插入和刪除元素,而更多的操作是訪問資料的應用。
線性表順序儲存結構的優缺點
優點:
缺點:
本部落格是用於自己學習小甲魚資料結構的學習總結
b站位址為小甲魚資料結構學習
資料結構學習筆記 線性表
線性表是零個或多個資料元素的有限序列。線性表的資料物件集合為。其中,除第乙個元素a1外,每乙個元素有且只有乙個直接前驅元素,除了最後乙個元素an外,每個元素有且只有乙個直接後繼元素。資料元素之間的關係是一對一的關係 線性表的順序儲存結構指的是用一段位址連續的儲存單元依次儲存線性表的資料元素。簡單的說...
資料結構學習 線性表
線性表一般分為順序結構和鏈式結構。順序表裡面元素的位址是連續的,如陣列 鍊錶裡面節點的位址不是連續的,是通過指標連起來的,如單鏈表 順序結構 優點 易於查詢,索引快 list n 這樣的操作,o 1 複雜度。缺點 擴充套件性弱,不易刪除 插入,這兩項操作均是o n 的時間複雜度 鍊錶結構 優點 擴充...
資料結構學習 線性表
考試前複習下資料結構,把一些知識點整理在這!主要參考了殷人昆主編的 資料結構 用物件導向方法與c 語言描述 這本書,以及中山大學劉聰老師的課件內容!鍊錶雙鏈表 線性表 linear list 是由n n 0 個資料元素 結點 a 0 a 1 a 2 a n 1 組成的有限序列。維基百科 線性表是乙個...