使用C++手动封装一个顺序表,包含成员数组一个,成员变量N个
代码
#include <iostream>
//使用C++手动封装一个顺序表,包含成员数组一个,成员变量N个
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); //添加数据函数void showsize(); //显示容量int length(); //求当前顺序表的实际长度bool insert_pos(int pos,datatype e); //任意位置插入函数bool delete_pos(int pos); //任意位置删除函数datatype &at(int index); //访问容器中任意一个元素 atvoid expand(); //二倍扩容void show(); //展示顺序表
};void Seqlist::init(int s)
{size = s;data = new datatype[size]{0};
}bool Seqlist::empty()
{return len == 0;
}bool Seqlist::full()
{return len == size;
}bool Seqlist::add(datatype e)
{if(full()){expand();}data[len] = e;len++;return true;
}void Seqlist::showsize()
{cout << "size = " << size << endl;
}int Seqlist::length()
{return len;
}bool Seqlist::insert_pos(int pos,datatype e)
{if(full()){return false;}for(int i=len;i>pos;i--){data[i] = data[i-1];}data[pos] = e;len++;return true;
}bool Seqlist::delete_pos(int pos)
{if(empty()){cout << "没有数据" << endl;return false;}for(int i=pos;i<len;i++){data[i] = data[i+1];}len--;return true;
}datatype &Seqlist::at(int index)
{return data[index];
}void Seqlist::show()
{for(int i=0;i<len;i++){cout << data[i] << " ";}cout << endl;
}void Seqlist::expand()
{size = 2 * size;datatype *newdata = new datatype[size]{0};int *p = data;for(int i=0;i<len;i++){newdata[i] = data[i];}data = newdata;delete []p;
}
int main()
{Seqlist s1;s1.init(8);for(int i=1;i<=5;i++){s1.add(i);}cout << "length = " << s1.length() << endl;s1.show();s1.insert_pos(2,9);cout << "length = " << s1.length() << endl;s1.show();s1.delete_pos(2);cout << "length = " << s1.length() << endl;s1.show();s1.at(0) = 2;s1.show();s1.add(8);s1.add(8);s1.add(8);s1.add(8);s1.show();cout << "length = " << s1.length() << endl;s1.showsize();return 0;
}
效果图
思维导图