顺序表的基本操作
InitList(&L) :初始化表。构造一个空的线性表L,分配内存空间。
DestroyList(&L,i,e):销毁操作。销毁线性表,并释放线性表L所占用的内存空间。
ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。
ListDetele(&L,i,&e):删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。
LocateElem(L,e):按值查找操作。在表L中查找具有给定关键词的元素。
GetElem(L,i):按位查找操作。获取表L中第i个位置的元素。
方法1:静态分配
创建
1 2 3 4 5
| #define MaxSize 10 typedef struct{ int data[MxaSize]; int length; }SqList;
|
初始化
1 2 3 4 5
| void InitList(SqList &L){ for(int i=0; i<MaxSize; i++) L.data[i]=0; L.length=0; }
|
方法2:动态分配
创建
1 2 3 4 5 6
| #define InitSize 10 typedef struct{ int *data; int MxaSize; int length; }SeqList;
|
初始化
1 2 3 4 5 6
| void InitList(SeqList &L){ L.data=(int*)malloc(InitSize*sizeof(int)); L.MaxSize = InitSize; L.length=0; }
|
增加长度
1 2 3 4 5 6 7 8 9
| void IncreaseSize(SeqList &L, int len){ int *p = L.data; L.data = (int*)malloc((L.MaxSize+len)*sizeof(int)); for(int i=0; i<L.length; i++){ L.data[i] = p.data[i]; } L.MaxSize = L.MaxSize+len; free(p); }
|
增删查改
插入
1 2 3 4 5 6 7 8 9 10
| void ListInsert(SqList &L,int i,int 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++; }
|
删除
1 2 3 4 5 6 7 8 9
| void ListDelete(&L,i,&e){ if(i<1||i>L.length) return flase; e = L.length[i-1]; for(int j=i;j<L.length;j++) L.data[j-1]=L.data[j]; L.length--; }
|
按位查找
1 2 3
| int GetElem(SqList L,int i){ return L.data[i-1]; }
|
按值查找
1 2 3 4 5 6 7
| int LocateElem(SqList L,int e){ for(int i=0;i<L.length;i++) if(L.data[i]==e) return i+1; return 0; }
|