c++手动封装顺序表
#include <iostream>
using namespace std;
using datatype =int;//类型重命名
struct SeqList
{
private:
datatype *data;//顺序表数组
int size=0;//数组大小
int len=0;//顺序表实际长度
public:
void init(int s);//初始化函数
bool empty();//判空函数
bool full();//判满函数
bool add(datatype e);//添加数据函数
int length();//求顺序表实际长度
bool insert_pos(int pos,datatype e);//任意位置插入函数
bool delete_pos(int pos);//任意位置删除函数
datatype &at(int index);//访问任意一个元素函数
void expand();//二倍扩容函数
};
//初始化函数
void SeqList::init(int s)
{
size=s;
data=new datatype(size);
}
//判空
bool SeqList::empty()
{
return len==0;//实际长度是否为0
}
bool SeqList::full()
{
return len==size;//实际长度是否为最大大小
}
//添加
bool SeqList::add(datatype e)
{ //判满
if(full())
{
return 0;
}
data[len]=e;//添加
len++;//长度加1
return 1;
}
//实际长度
int SeqList::length()
{
return len;//返回实际长度
}
//任意位置插入
bool SeqList::insert_pos(int pos, datatype e)
{
//判满和插入位置
if(full()||pos<1||pos>len+1)
{
return 0;
}
int i;
//后一个等于前一个
for(i=len;i>pos-1;i--)
{
data[i]=data[i-1];
}
//按位置插入
data[i]=e;
len++;//实际长度加一
return 1;
}
//任意位置删除
bool SeqList::delete_pos(int pos)
{
//判空和删除位置
if(empty()||pos<1||pos>len)
{
return 0;
}
//前一个等于后一个
for(int i=pos;i<len;i++)
{
data[i-2]=data[i-1];
}
len--;//实际长度减一
data[len]=0;//最后一个数据清零
return 1;
}
datatype& SeqList::at(int index)
{
return data[index];//返回任意位置数据
}
void SeqList::expand()
{
size=size*2;//二倍最大长度
datatype *temp=new datatype[size];//堆区创建数组空间
//搬运原数组
for(int i=0;i<len;i++)
{
temp[i]=data[i];
}
delete[]data;//销毁原堆区空间
data=temp;//指针重新指向该堆区空间
}