一、思维导图

二、使用C++手动封装一个顺序表,包含成员数组一个
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <csignal>using namespace std;
using datatype = int;
#define MAX 30struct Seqlist
{
private:// datatype data[MAX] = {0}; //顺序表的数组datatype *data; //顺序表的数组int size = 0; //数组的大小int len = 0; //顺序表实际长度public://初始化函数void init(int n);//判空函数bool empty();//判满函数bool full();//添加数据函数bool add(datatype element);//求当前顺序表的实际长度int seq_length();//任意位置插入函数bool insert_pos(int pos, datatype element);//任意位置函数函数bool delete_pos(int pos);//访问容器中任意一个元素 atdatatype &at(int index);//遍历展示顺序表bool list_show();//二倍扩容void expend();//销毁void destroy();};
//结构体函数定义
void Seqlist::init(int n)
{size = n; //当前数组的最大容量data = new datatype[size]; //在堆区申请一个顺序表容器
}bool Seqlist::empty()
{return len==0?1:0;
}bool Seqlist::full()
{return len==size?1:0;
}bool Seqlist::add(datatype element)
{//判满bool res = full();if(res == 1){expend();}data[len] = element;len++;cout<<"size ="<<size<<endl;return 1;
}int Seqlist::seq_length()
{return len;
}bool Seqlist::insert_pos(int pos, datatype element)
{//判满bool res = full();if(res == 1){expend();}//判断pos合法性if(pos<0 || pos>len){cout<<"插入位置错误"<<endl;return 0;}//插入位置所有元素后移for(int i=len-1;i>len-pos;i--){data[i+1] = data[i];}// 插入新元素data[pos] = element;// 更新长度len++;return 1;
}datatype& Seqlist::at(int index)
{//判断位置合法if(index<0 || index>=len){cout<<"访问位置错误,返回默认位置"<<endl;return data[0];}return data[index];
}bool Seqlist::list_show()
{//判断表空if(len == 0){cout<<"empty"<<endl;return 0;}for(int i=0;i<len;i++){cout<<data[i]<<"\t";}cout<<endl;return 1;
}
void Seqlist::expend()
{//申请二倍空间datatype* temp =new datatype[size*2];//将原顺序表拷贝到新顺序表memcpy(temp,data,size* sizeof(datatype));delete[] data; //销毁原顺序表data = temp; //data重新指向新顺序表size *= 2;
}void Seqlist::destroy()
{delete[] data;size = 0;len = 0;data = NULL;
}int main()
{cout<<"***********顺序表***********"<<endl;cout<<" 1、创建顺序表 "<<endl;cout<<" 2、初始化顺序表 "<<endl;cout<<" 3、任意位置插入 "<<endl;cout<<" 4、打印顺序表 "<<endl;cout<<" 5、打印任意位置 "<<endl;cout<<" 6、销毁顺序表 "<<endl;//实例化一个顺序表Seqlist list;while(1){//system("cls"); //清屏int menu = 0;cout<<"请输入操作选项:";cin>>menu;switch(menu){case 1:{cout<<"创建顺序表"<<endl;int size = 0;cout<<"请输入需要创建顺序表的大小"<<endl;cin>>size;list.init(size);cout<<"创建成功"<<endl;}break;case 2:{cout<<"初始化顺序表"<<endl;int n = 0;cout<<"请输入您要插入数据个数"<<endl;cin>>n;datatype element = 0;for(int i=0;i<n;i++){cout<<"请输入第"<<i+1<<"个数据"<<endl;cin>>element;list.add(element);}cout<<"初始化成功"<<endl;}break;case 3:{cout<<"任意位置插入"<<endl;int pos = 0;datatype element;cout<<"请输入您要插入的位置"<<endl;cin>>pos;cout<<"请输入您要插入的元素"<<endl;cin>>element;bool res = list.insert_pos(pos,element);if(res == 1){cout<<"任意位置插入成功"<<endl;}}break;case 4:{cout<<"打印顺序表"<<endl;//输出list.list_show();}break;case 5:{cout<<"打印任意位置"<<endl;int pos = 0;cout<<"请输入您要查看的位置:";cin>>pos;cout<<list.at(pos-1)<<endl;}break;case 6:{cout<<"销毁顺序表"<<endl;list.destroy();cout<<"销毁成功"<<endl;}break;default:cout<<"选项输入错误"<<endl;}}return 0;
}
