C++ DAY2
作业:完成 //判空函数
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);
//君子函数:二倍扩容
void expend();
#include <iostream>using namespace std;//类型重命名
using datatype = int; //typedef int datatype;
#define MAX 30struct SeqList
{private:// datatype data[MAX] = {0}; //顺序表的数组datatype *data; //顺序表的数组int size = 0; //数组的大小int len = 0; //顺序表实际长度public://初始化函数void init(int s){size = s; //当前数组的最大容量data = new datatype[size]; //在堆区申请一个顺序表容器}//要实现的函数//判空函数bool empty();//判满函数bool full();//添加数据函数bool add(datatype e);//求当前顺序表的实际长度int length();//任意位置插入函数bool insert_pos(int pos, datatype e);//任意位置函数函数bool delete_pos(int pos);//访问容器中任意一个元素 atdatatype &at(int index);//君子函数:二倍扩容datatype * expand();//遍历函数bool show();//删除顺序表bool destroy();};
bool SeqList ::empty()
{return len==0; // len 是否等于 0,表示顺序表是否为空
}bool SeqList ::full()
{return len==size; //当实际元素数量==数组大小时为满
}
//添加数据函数
bool SeqList ::add(datatype e)
{//判断逻辑if(NULL==data){cout<<"添加失败"<<endl;return 0;}else if(full()){data=expand();}//插入逻辑data[len]=e;len++;cout<<"插入成功"<<endl;return 1;
}
//求当前顺序表的实际长度
int SeqList ::length()
{cout<<"顺序表长度为"<<len<<endl;return 0;
}//任意位置插入函数
bool SeqList ::insert_pos(int pos, datatype e)
{//判断逻辑if(NULL==data||pos<=0||pos>len){cout<<"插入失败"<<endl;return 0;}else if(full()){data=expand();}//移动逻辑if(pos==len){data[pos]=e;}else{for(int i=len-1;i>=pos;i--){data[i+1]=data[i];}data[pos-1]=e;}//插入逻辑len++;cout<<"插入成功"<<endl;return 1;}
//任意位置删除函数
bool SeqList ::delete_pos(int pos)
{//判断逻辑if(NULL==data||empty()||pos<=0||pos>len){cout<<"删除失败"<<endl;return 0;}//删除逻辑for(int i=pos;i<len;i++){data[i-1]=data[i];}len--;cout<<"删除成功"<<endl;return 1;
}
//访问容器中任意一个元素 at
datatype &SeqList ::at(int index)
{if (index >= 0 && index < len){return data[index]; // 返回索引为 index 的元素的引用}else{// 处理索引越界的情况throw std::out_of_range("Index out of bounds");}}//君子函数:二倍扩容
datatype* SeqList ::expand()
{datatype *temp;size*=2;temp=new datatype[size];copy(data, data + size / 2, temp);delete [] data;return temp;
}
//遍历函数
bool SeqList ::show()
{//判断逻辑if(NULL==data||empty()){cout<<"遍历失败"<<endl;return 0;}cout<<"容器里的元素有:"<<'\t';for(int i=0;i<len;i++){cout<<data[i]<<'\t';}cout<<endl;return 1;
}
bool SeqList:: destroy()
{delete[]data;return 1;
}int main()
{struct SeqList mylist; //创建顺序表int size=5; //设置容量mylist.init(size); //初始化mylist.add(6);mylist.add(4);mylist.add(3);mylist.add(7);mylist.add(5); //至此已满mylist.show();mylist.add(2);mylist.add(1);mylist.show();mylist.insert_pos(0,10); //位置输入0 插入失败mylist.insert_pos(1,10); //位置输入1 头插mylist.show();mylist.length(); //此时长度len为8mylist.insert_pos(9,10);mylist.insert_pos(8,10);mylist.show();mylist.delete_pos(4);mylist.show();mylist.length(); cout<<"访问的值为"<<mylist.at(2)<<endl; //访问数组第二个元素mylist.destroy(); //删除顺序表return 0;
}