線性表的定義和基本操作
2.1 線性表的定義和基本操作
線性表是具有相同型別的n(n>=0)個元素的有限序列,其中n為表長,當n=0時,該表為空表。
若L命名為線性表,則一般表示為L = (a1,a2,...,ai,ai+1,...,an)
2.1.1線性表的九種基本操作:
InitList(&L):初始化表,構造一個空的線性表
DestroyList(&L):銷燬操作。銷燬線性表並釋放所佔用的記憶體空間。
LocateElem(L,e):按值查詢。
GetElem(L,i):按位查詢。
ListInsert(&L,i,e):插入操作,預設線性表中的插入操作為前插。
ListDelete(&L,i,&e):刪除操作,刪除第i個元素並用e返回刪除元素的值。
PrintList(L):輸出操作。按前後順序輸出L中所有元素的值。
Empty(L):判空操作。
Length(L):求表長。
2.1.2 順序表
線性表的順序儲存。
在連續地址上存放連續的線性表中的元素。使邏輯相鄰的元素在物理儲存地址上也相鄰。
順序表插入操作
bool ListInsert(Sqlist &L, int i, ElemType e){
if(i<1||i>L.length+1)
return false;
if(L.length>=MaxSize)
return false;
for(int j=L.length; j>=i; j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length++;
return true;
}
順序表刪除操作
bool ListDelete(SqList &L, int i, ElemType &e){
if (i<1||i>L.length)
return false;
e = L.data[i-1];
for (int j = i; j < L.length; j++)
L.data[j-1] = L.data[j];
L.length--;
return true;
}
順序表按值查詢操作
int LocateElem(Sqlist L, ElemType e){
int i;
for(i=0; i<L.length; i++)
if (L.data[i]==e)
return i+1;
return 0;
}
2.1.3 單鏈表
typedef struct Lnode{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
2.2 順序表和連結串列的差異性
順序儲存無論靜態分配還是非靜態都需要預先分配合適的記憶體空間
鏈式儲存在需要時分配結點空間即可,高效方便,但指標要使用額外空間。