2.1 线性表
线性表,具有相同类型的,有序序列。
除第一个元素外,每个元素有且仅有一个直接前驱。除最后一个元素外,每个元素有且仅有一个直接后继。
线性表是逻辑结构。顺序表和链表是存储结构。
基本操作
1 2 3 4 5 6 7 8 9 10 11 12
| 初始化表,InitList(&L) 求表长,Length(L) 按值查找操作,LocateElem(L,e) 按位查找操作,GetElem(L,i) 插入操作,ListInsert(&L,i,e) 删除操作,ListDelete(&L,i,&e).【删除表L中的第i个位置的元素,并用e返回删除元素的值】 输出操作,PrintList(L) 判空操作,Empty(L) 销毁操作,DestoryList(&L)【销毁线性表,并放出线性表L所占用的内存空间】
# elem,是element元素的缩写 # &表示c++中的引用调用。&在C中是取地址符
|
2.2 线性表的顺序表示
又叫顺序表。
1 2 3 4 5 6
| #define MaxSize 50 typedef struct{ ElemType data[MaxSize]; int length; }SqList;
|
1 2 3 4 5 6
| #define InitSize 100 typedef struct{ ElemType *data; int MaxSize,Length; }SeqList;
|
顺序表的初始化
1 2 3 4 5
|
void InitList(SqList &L){ L.length = 0; }
|
1 2 3 4 5 6
| void InitList(SeqList &L){ L.data = (ElemType *)malloc(InitSize*sizeof(ElemType)); L.length = 0; L.MaxSize = InitSize; }
|
插入操作
在第i个位置插入新元素e。
1 2 3 4 5 6 7 8 9 10 11
| 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; }
|
删除操作
删除表中第i个元素。
1 2 3 4 5 6 7 8 9
| 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; }
|
按值查找(顺序查找)
查找第一个元素等于e的元素,并返回其位序。
1 2 3 4 5 6 7
| 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; }
|