#include <iostream>
#include <stdlib.h>
using namespace std;
//状态代码
#define OK 1
#define ERROR 0
#define OVERFLOW -2
//函数返回值类型
typedef int Status;
#define InitSize 10//默认最大长度
#define ElemType int
//定义顺序表结构
typedef struct
{
int *data;//指示动态分配数组的指针
int MaxSize;
int length;
} SqList;
void InitList(SqList &L) //初始化
{
L.data=(int *)malloc(InitSize*sizeof(int));//用malloc函数申请一片连续的存储空间
L.length=InitSize-1;
L.MaxSize=InitSize;
}
bool InsertList(SqList &L,int i,int e) //在i处插入e
{
if(i<1||i>L.length+1)
return false;
if(L.length>=L.MaxSize)
return false;
for(int j=L.length; j>=i; j--) //将第i个元素及之后元素后移
L.data[j]=L.data[j-1]; //最好时间复杂度O(1) 最坏O(n)
L.data[i-1]=e;
L.length++;
}
bool DeleteList(SqList &L,int i,int &e)
{
if(i<1||i>L.length)//判断是否有效
return false;
e=L.data[i-1];//将被删除的元素赋值给e
for(int j=i; j<L.length; j++)
L.data[j-1]=L.data[j];
L.length--;
return true;
}
//增加动态数组的长度
void IncreaseSize(SqList &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[i];//将数据复制到新区域
}
L.MaxSize=L.MaxSize+len;//顺序表最大长度增加len
free(p);//释放原来的内存空间
}
int main()
{
SqList L;//声明一个顺序表
InitList(L);//初始化顺序表
if(InsertList(L,3,3)) //在3处插入3
{
cout<<"插入成功"<<endl;
}
else
{
cout<<"插入失败"<<endl;
}
int e=-1;//用e把被删元素带回
if(DeleteList(L,3,e)) //删除第三个元素
{
cout<<"删除成功:"<<e<<endl;
}
else
{
cout<<"删除失败"<<endl;
}
cout<<"顺序表最大长度:"<<L.MaxSize<<endl;
IncreaseSize(L,5);//新增5个长度
cout<<"顺序表最大长度:"<<L.MaxSize<<endl;
return 0;
}