第二章 线性表
线性表的顺序表示
顺序表的定义
- 静态分配
1 2 3 4 5
| # define MaxSize 50 typedef struct{ Elemtype data[MaxSize]; int length; }Sqlist;
|
- 动态分配
1 2 3 4 5 6 7 8 9 10 11
| # define InitSize 100 typedef struct{ ElemType *data; int MaxSize,length; }SeqList;
L.data = (ElemType*)malloc(sizeof(ElemType)*InitSize);
L.data = new ElemType[InitSize];
|
顺序表基本操作的实现
插入操作
1 2 3 4 5 6 7 8 9 10 11 12
| 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){
//删除顺序表L中的第i个位置元素,使用引用变量e返回
if(i<1||i>L.length) //无效范围
return false;
e = L.data[i-1]; //赋值给e
for(int j=i;j<L.length;j++) //将第i个位置后的元素前移
L.data[j-1] = L.data[j];
L.length--; //线性表长度-1
return true;
}
#### 按值查找
```c
int LocateElem(SqList L, ElemType e){
//查找第一个值等于e的元素,返回位序
int i;
for(i=0;i<L.length;i++)
if(L.data[i]==e)
return i+1; //下标为i的元素值等于e,返回其位序i+1
return 0 //没找到
}