線性表(list):零個或多個資料元素的有限序列。
線性表的抽象資料型別:
adt 線性表(list)
data
線性表的資料物件集合為(a1,a2,......,an),每個元素的型別均為datatype。其中,除第乙個元素a1外,每乙個元素有且只有乙個直接前驅元素,除了最後乙個元素an外,每乙個元素有且只有乙個直接後繼元素。資料元素之間的關係是一對一關係。
operation
initlist(*l): 初始化操作,建立乙個空的線性表l。
listempty(l): 若線性表為空,返回true,否則返回false。
clearlist(*l): 將線性表清空。
getelem(l,i,*e):將線性表l中的第i個位置元素值返回給e。
listdelete(*l,i,*e):刪除線性表l中的第i個位置元素,並用e返回其值。
listlength(l):返回線性表l的元素個數。
endadt
線性表的順序儲存結構**:
#define ok 1
#define error 0
#define true 1
#define false 0
#define maxsize 50
typedef int elemtype;
typedef int status;
typedef structsqlist;
說白了,線性表的順序儲存結構就三個屬性:
1.儲存空間的起始位置:陣列data,它的儲存位置就是儲存空間的儲存位置。
2.線性表的最大儲存容量:陣列長度maxsize。
3.線性表的當前長度:length。
注:陣列的長度是存放線性表的儲存空間的長度,也可以理解為線性表的最大長度;而線性表的長度是線性表中資料元素的個數。線性表的長度應小於或等於陣列長度。
線性表的初始化,也就是將線性表長度置為0:
//初始化線性表
status initlist(sqlist *l)
查詢線性表中第i個元素,並返回值給e:
//查詢線性表中第i個元素,並返回值給e
status getelem(sqlist l,int i,elemtype *e)
查詢線性表中與e值相等的元素的位置(第i個元素):
//查詢線性表中與e值相等的元素的位置(第i個元素)
int locateelem(sqlist l,elemtype e)
}
判斷線性表是否為空:
//判斷線性表是否為空
bool listempty(sqlist l)
status listinsert(sqlist *l,int i,elemtype e)
l.data[i-1]=e;
return ok;}
刪除線性表的第i個元素,並用e返回其值:
//刪除線性表的第i個元素,並用e返回其值
status listdelete(sqlist *l,int i,elemtype *e)
return ok;
}
線性表的優缺點:
優點:1.無須為表示表中元素之間的邏輯關係而增加額外的儲存空間。
2.可以快速地訪問表中任一位置的元素。
缺點:1.插入和刪除操作需要移動大量元素。
2.當線性表長度變化較大時,難以確定儲存空間的容量。
3.造成儲存空間的「碎片」。
線性表線性(順序)儲存結構
實現順序表的曾刪查操作 元素結構體 define maxsize 100 線性表的最大長度 typedef int elemtype elemtype為線性表元素的型別 typedef struct sequenlist 插入操作 bool insertinseqlist sequenlist l,...
線性表的順序儲存 線性表的順序儲存結構
1,本文實現乙個線性表 2,順序儲存定義 1,線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表中的資料元素 2,在 c 中可以用乙個陣列作為介質來儲存資料元素 3,設計思路 1,可以用一維陣列實現順序儲存結構 1,儲存空間 t m array 2,當前長度 int m length...
線性表 順序儲存結構
s1線性表的基本概念 1 有而且只有乙個 第一元素 2 有而且只有乙個 最後元素 3 除第一元素之外,其他元素都有唯一的直接前驅。4 除最後元素之外,其他元素都有唯一的直接後繼。s2計算公式 若第乙個元素的位址是a,每個元素占用的儲存空間為d,則陣列的第i個元素的位址可以用如下公式計算 loc i ...