使用C++手动封装一个顺序表,包含成员数组一个,成员变量N个
#include <iostream>
#include <string>using namespace std;using datatype = int;struct Seqlist
{
private:datatype *data = NULL;int size = 0;int len = 0;public://初始化函数void init(int s);//判空函数bool empty();//判满函数bool full();//添加数据函数bool add(datatype e);//求当前顺序表的实际长度int length();//求顺序表的大小int SIZE();//任意位置插入函数bool insert_pos(int pos, datatype e);//任意位置函数函数bool delete_pos(int pos);//访问容器中任意一个元素 atdatatype &at(int index);//二倍扩容void expend();
};//初始化函数
void Seqlist::init(int s)
{size = s;data = new datatype[size];
}//判空函数
bool Seqlist::empty()
{return 0 == len;
}//判满函数
bool Seqlist::full()
{return size == len;
}//添加数据函数
bool Seqlist::add(datatype e)
{if(NULL == data){cout << "添加失败" << endl;return false;}if(full()){expend();}data[len] = e;len++;cout << "添加成功" << endl;return true;
}//求当前顺序表的实际长度
int Seqlist::length()
{return len;
}//求顺序表的大小
int Seqlist::SIZE()
{return size;
}//任意位置插入函数
bool Seqlist::insert_pos(int pos, datatype e)
{if(NULL == data){cout << "插入失败" << endl;return false;}if(full()){expend();}for(int i=len; i>pos; i--){at(i) = at(i-1);}at(pos) = e;len++;cout << "插入成功" << endl;return true;
}//任意位置删除函数
bool Seqlist::delete_pos(int pos)
{if(empty() || NULL == data){cout << "删除失败" << endl;return false;}for(int i=pos; i<len; i++){at(i) = at(i+1);}len--;cout << "删除成功" << endl;return true;
}//访问容器中任意一个元素 at
datatype &Seqlist::at(int index)
{return data[index];
}//二倍扩容
void Seqlist::expend()
{size = size*2;datatype *temp = new datatype[size];memcpy(temp, data, size/2*sizeof(datatype));delete []data;data = temp;
}int main()
{Seqlist L;L.init(10);for(int i=0; i<30; i++){L.add(i);cout << "此时顺序表大小为:" << L.SIZE() << endl;cout << "此时顺序表实际长度为:" << L.length() << endl;}L.insert_pos(1, 666);L.delete_pos(1);for(int i=0; i<L.length(); i++){cout << L.at(i) << " ";}cout << endl;return 0;
}
思维导图: