線性表是具有相同資料型別的n(n ≥ 0)個資料元素的有限序列,其中n為表長,當n = 0 時,線性表是乙個空表,若用l命名線性表,則其一般表示式為:
l = (a1,a2,a3,···,an)
式中,a1是唯一的「第乙個」資料元素,又稱為表頭元素;an是唯一的「最後」乙個元素,又稱為表尾元素。除第乙個元素外,每個元素有且僅有乙個直接前驅;除最後乙個元素外,每個元素有且只有乙個直接後繼。
假定線性表的元素型別為elemtype, 則線性表的順序儲存型別描述為
#define maxsize 50
//定義線性表的最大長度
typedef
struct
sqlist;
//順序表的型別定義
一維陣列可以是靜態分配也可以是動態分配,靜態分配時,陣列的大小和空間事先定好了,一旦空間佔滿,再加入新的資料將會產生溢位,進而導致程式崩潰,故可採用動態分配的方法。
#define initsize 100
//表長度的定義
typedef
struct
seqlist;
//動態分配陣列順序表的型別定義
(1)插入操作
在順序表 l 的第 i (1 <=i<=l.length+1) 個位置插入新元素,若 i 的位置不合法,則返回 false ,表示插入失敗;否則,將順序表的第 i 個元素機器後的所有元素後移乙個位置,騰出空來插入新元素 e, 順序表的長度再加 1, 返回true,表示插入成功。
bool
listinsert
(sqlist &l,
int i, elemtype e)
最好情況:在表尾插入(即 i = n +1),元素後移不執行,時間複雜度為o(1);
最壞情況:在表頭插入(即 i = 1),元素後移將執行 n 次,時間複雜度為 o(n);
線性表插入演算法的平均時間複雜度為o(n)。
(2)刪除操作
刪除順序表 l 中第 i 個(1 <=i<=l.length+1) 個位置的元素,若成功則返回 true, 並將被刪除的元素用引用變數 e 返回, 否則返回 false。
bool
listdelete
(sqlist &l,
int i, elemtype &e)
return0;
//退出迴圈,說明查詢失敗
}
最好情況:查詢的元素就在表頭,僅需要比較一次,時間複雜度為o(1);
最壞情況:查詢的元素在表尾(或不存在)時,需要比較 n 次,時間複雜度為 o(n);
線性表按值查詢的平均時間複雜度為o(n)。
線性表的順序儲存 線性表的順序儲存結構
1,本文實現乙個線性表 2,順序儲存定義 1,線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表中的資料元素 2,在 c 中可以用乙個陣列作為介質來儲存資料元素 3,設計思路 1,可以用一維陣列實現順序儲存結構 1,儲存空間 t m array 2,當前長度 int m length...
線性表順序儲存
線性表順序儲存結構的建立 插入結點 刪除結點 就地逆置。include stdio.h include malloc.h typedef struct slist,list void init list 線性表初始化 void insert list s,int p 線性表插入 void delet...
線性表順序儲存
時間複雜度效率 o 1 o logn o n o nlogn o n 2 o n 3 o 2 n o n o n n 線性表順序儲存 線性表 順序儲存 include include define maxsize 1024 typedef int elementtype typedef struct...