#include<stdio.h>
#define MAXSIZE 10 //默认的最大长度
//顺序表类型定义
typedef struct
{
int *elem; //指示动态分配数组的指针
int length; //顺序表的当前长度
}SqList;
//初始化顺序表
bool InitList(SqList &L){
L.elem=new int[MAXSIZE]; //为顺序表分配空间
if(!L.elem) //存储分配失败
return false;
L.length=0;
return true;
}
//销毁顺序表
void DestroyList(SqList &L){
if(L.elem) delete L.elem; //释放存储空间
}
//清空顺序表
void ClearList(SqList &L){
L.length=0;
}
//求顺序表的长度
int GetLength(SqList L){
return L.length;
}
//判断顺序表是否为空
bool IsEmpty(SqList L){
if(L.length==0) return true;
else return false;
}
//顺序表的取值(取第i个元素)
bool GetElem(SqList L,int i,int &e){
if(i<1 || i>L.length) //判断i值是否合理
return false;
e=L.elem[i-1];
return true;
}
//插入
bool 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-1;j>=i-1;j--)
L.elem[j+1]=L.elem[j]; //插入位置及之后的元素后移
L.elem[i-1]=e;
L.length++;
return true;
}
//顺序表的查找
int LocateElem(SqList L,int e){
for(int i=0;i<L.length;i++)
if(L.elem[i]==e) return i+1;
return -1; //查找失败
}
//删除
bool ListDelete(SqList &L,int i){
if(i<1 ||i>L.length) return false; //删除位置不合法
for(int j=i;j<=L.length-1;j++)
L.elem[j-1]=L.elem[j]; //被删除元素之后的元素前移
L.length--;
return true;
}
//遍历
void PrintList(SqList L){
for(int i=0;i<L.length;i++)
printf("L.elem[%d]=%d\n",i,L.elem[i]);
}
int main(){
//定义和初始化
SqList L;
InitList(L);
//插入元素
for(int i=1;i<7;i++)
ListInsert(L,i,i);
//遍历
PrintList(L);
//取值
int e;
GetElem(L,3,e);
printf("第三个元素=%d\n",3,e);
//查找
printf("元素3的位置:%d\n", LocateElem(L,3));
//删除元素3
ListDelete(L,3);
//遍历
PrintList(L);
return 0;
}
