線性表
定義
線性表(List):零個或多個資料元素的有限序列
線性表元素的個數n(n≥0)定義為線性表的長度,當n=0時,稱為空表。
抽象資料型別
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。
LocateElem(L, e): 線上性表L中查詢與給定值e相等的元素,
如果查詢成功,返回該元素在表中序號表示成功;
複製程式碼
順序儲存結構
定義
線性表的順序儲存結構,指的是用一段地址連續的儲存單元依次儲存線性表的資料元素。
順序儲存方式
把第一個資料元素存到陣列下標為0的位置中,接著把線性表相鄰的元素儲存在陣列中相鄰的位置。
/* 儲存空間初始分配量 */
#define MAXSIZE 20
/* ElemType型別根據實際情況而定,這裡假設為int */
typedef int ElemType;
typedef struct
{
/* 陣列儲存資料元素,最大值為MAXSIZE */
ElemType data[MAXSIZE];
/* 線性表當前長度 */
int length;
} SqList;
複製程式碼
陣列長度與線性表長度區別
- 陣列的長度是存放線性表的儲存空間的長度,儲存分配後這個量一般是不變的。
- 線性表的長度是線性表中資料元素的個數,隨著線性表插入和刪除操作的進行,這個量是變化的。
- 在任意時刻,線性表的長度應該小於等於陣列的長度。
地址計算方法
用陣列儲存順序表意味著要分配固定長度的陣列空間,由於線性表中可以進行插入和刪除操作,因此分配的陣列空間要大於等於當前線性表的長度。假設佔用的是c個儲存單元,那麼線性表中第i+1個資料元素的儲存位置和第i個資料元素的儲存位置滿足下列關係(LOC表示獲得儲存位置的函式)。
LOC(ai+1)=LOC(ai)+c
LOC(ai)=LOC(a1)+(i-1)*c
複製程式碼
歡迎掃描下方二維碼,持續關注:
網際網路工程師(id:phpstcn),我們一起學習,一起進步