一、作业
代码:
#include <iostream>
using namespace std;
using datatype = int; //类型重命名
#define MAX 2 //宏定义
//结构体定义
struct Sqlist
{
private:
datatype *data; //顺序表数组
int size = 0; //数组大小
int len = 0; //数组实际长度
public:
//初始化函数
void init(int s)
{
size = s; //当前数组的最大容量
data = new datatype(size); //在堆区申请一个顺序表容量为size
}
//判空函数
bool empty();
//判满函数
bool full();
//添加数据函数
bool add(datatype e);
//当前顺序表实际长度
int length();
//任意位置插入
bool insert_pos(int pos,datatype e);
//任意位置删除
bool delete_pos(int pos);
//访问容器中任意一个元素 at
datatype &at(int index)
{
return data[index-1];
}
//展示数组所有内容
void output()
{
cout<<"顺序表中数组如下:"<<endl;
for(int i=0;i<len;i++)
{
cout<<data[i]<<" ";
}
cout<<endl;
}
//二倍扩容
void expend();
};
/*****************定义结构体内公共函数******************/
int Sqlist::length()
{
return len;
}
bool Sqlist::empty()
{
int llen = length();
if(llen==0)
{
cout<<"顺序表为空"<<endl;
return 1;
}
return 0;
}
bool Sqlist::full()
{
int llen = length();
if(llen==size)
{
cout<<"顺序表已满"<<endl;
return 1;
}
return 0;
}
bool Sqlist::add(datatype e)
{
//判满
if(full()==1)
{
expend();
}
//加入数据
data[len] = e;
len++;
return 1;
}
bool Sqlist::insert_pos(int pos, datatype e)
{
//加入数据
if(add(e)==1)
{
//把数据放入指定位置
for(int i=len-1;i>=pos;i--)
{
data[i+1] = data[i];
}
data[pos] = data[len];
cout<<"数据添加成功"<<endl;
return 1;
}
cout<<"添加失败"<<endl;
return 0;
}
bool Sqlist::delete_pos(int pos)
{
//判空
if(empty()==1)
{
cout<<"顺序表数组已空不能再删除了"<<endl;
return 0;
}
//删除指定位置数据
for(int i=pos+1;i<len;i++)
{
data[i-1] = data[i];
}
len--;
cout<<"数据删除成功"<<endl;
return 1;
}
void Sqlist::expend()
{
//判满
if(full()==0)
{
return;
}
//初始化一个新堆区空间
int new_size = 2*size;
init(new_size);
cout<<"扩容成功"<<endl;
}
/*******************主程序*************************/
int main()
{
Sqlist s1; //定义一个结构体变量
s1.init(MAX); //初始化
//插入数据
while(1)
{
int pos;
datatype e;
cout<<"请输入要放入的数据和位置"<<endl;
cin>>e>>pos;
//退出插入条件
if(pos == -1)
{
break;
}
s1.insert_pos(pos,e);
}
//删除数据
while(1)
{
int pos;
cout<<"请输入要删除的数据位置"<<endl;
cin>>pos;
//退出删除条件
if(pos == -1)
{
break;
}
s1.delete_pos(pos);
}
//展示顺序表内容
s1.output();
return 0;
}
运行结果:
二、思维导图