顺序存储
#define MAXSIZE 100 //存储空间的初始存储量
#define ERROR 0
#define OK 1
typedef int Status; //用来表示状态码
typedef int ElemType; //ElemType 的类型根据情况而定
//顺序存储
//动态分配的结构
typedef struct {
ElemType *data; //动态分配数组指针,指向的是顺序表的第一个位置
int length; // 线性表的当前长度,每一次添加新元素,线性表长度就加一
}SqList;//线性表表的名字
//初始化线性表
Status InitSqList(SqList &L){ //&这是c++的写法,&L相当于将线性表传了进去,会改变线性表的内容
L.data = (ElemType*)malloc(sizeof(ElemType)*MAXSIZE);//给线性表分配空间,一块连续的空间
if(!L.data)return ERROR;
L.length = 0;
return OK;
}
//销毁线性表
void DestroyList(SqList &L){
free(L.data);//释放线性表的空间
L.data = NULL; //结点指向为NULL
L.length = 0; //长度置零
}
//清空线性表
void ClearList(SqList &L){
L.length = 0; //长度置零
}
//求线性表的长度
int GetLength(SqList L){ //不用改变L内部的值,所以不用加&传递
return L.length;
}
//判断线性表是否为空
Status IsEmpty(SqList L){
if(L.length==0)return OK;
return ERROR;
}
//取值操作
Status GetElem(SqList L,int i,ElemType &e){
if(i<1 || i>L.length)return ERROR;
e = L.data[i-1];
return OK;
}
//查找操作(在线性表中查找值为e的元素)
Status LocateElem(SqList L,ElemType e){
for(int i=0;i
if(L.data[i]==e)return OK;
}
return ERROR;
}
//插入操作(在插入操作的时候,会移动若干个位置)
Status ListInsert(SqList &L,int i,ElemType e){
if(i<1 || i>L.length+1)return ERROR; //插入的位置越界就报错
if(L.length==MAXSIZE)return ERROR;//当前存储空间满,就报错
for(int j=L.length;j>=i;j--){//移动元素
L.data[j] = L.data[j-1];
}
L.data[i-1] = e;//插入元素
L.length++; //表长加一
return OK;
}
//删除操作
Status ListDelete(SqList &L, int i){ //删除指定位置
if(i<1 || i>L.length)return ERROR;//因为下标从0开始,所以第length个位置是没元素的,所以删不来
if(L.length==0)return ERROR;//表长为空,报错
for(int j=i-1;j
L.data[j] = L.data[j+1];
}
L.length--;
return OK;
}



