手动封装一个顺序表(SeqList),分文件编译实现
有私有成员:
顺序表数组的起始地址 ptr、 顺序表的总长度:size、顺序表的实际长度:len
成员函数:
初始化 init(int n)
判空:empty
判满:full
尾插:push_back
插入:insert(int index)
任意位置删除:erase(int index)
尾删: pop_back
求长度:size()
获取任意位置元素:& at(int inex)
将顺序表进行排序:sort(bool flag) //flag 为真,表示升序,否则是降序
代码展示
SeqList.h
#ifndef SEQLIST_H
#define SEQLIST_H
#include <iostream>
#include<memory.h>
#include<stdlib.h>
#include<string.h>using datatype = int;
using namespace std;//封装一个顺序表
class SeqList
{
private:datatype *ptr; //指向堆区空间的起始地址int size; //总长度int len = 0; //当前顺序表实际长度
public://初始化void init(int n);//判空bool empty();//判满bool full();//尾插void push_back(datatype e);//定义展示函数void show();//插入void insert(int index);//任意位置删除void delete_s(int index);//尾删: pop_backvoid pop_back();//求长度:size()datatype get_len();//获取任意位置元素datatype get_index(int index);//将顺序表进行排序void sort(bool flag);
};
#endif // SEQLIST_H
SeqList.cpp
#include "SeqList.h"void SeqList::init(int n)
{//在堆区申请出一个长度为n的空间,将其实地址赋值给ptrthis->ptr = new datatype[n];//给len进行初始化this->len = 0; //顺序表长度this->size = n; //顺序表最大值
}//判空
bool SeqList::empty()
{return this->len == 0;
}
//判满
bool SeqList::full()
{return this->len == this->size;
}
//尾插
void SeqList::push_back(datatype e)
{//判断是否满了if(this->full()){return ;}this->ptr[len++] = e;
}
//定义展示函数
void SeqList::show()
{//判空cout<<"当前顺序表中的元素分别是:";for(int i=0; i<this->len; i++){cout<<this->ptr[i]<<" ";}cout<<endl;
}
//插入
void SeqList::insert(int index){//判断是否满了if(this->full()){cout<<"表已经满了!"<<endl;return ;}//判断位置是否合理if(index>this->len+1 || index<=0 || index>this->size){cout<<"插入位置不合理"<<endl;return;}datatype e;cout<<"请输入插入元素:";cin >>e;for(int i=len-1;i>=index-1;i--){this->ptr[i+1] = this->ptr[i];}this->ptr[index-1] = e;this->len++;
}
//任意位置删除
void SeqList::delete_s(int index){//判断位置是否合理if(index>this->len||index<=0||index>this->size){cout<<"删除位置不合理"<<endl;return;}for(int i=index;i<this->len;i++){this->ptr[i-1] = this->ptr[i];}this->len--;
}
//尾删: pop_back
void SeqList::pop_back(){if(this->len==0){cout<<"顺序表为空!"<<endl;return;}this->len--;
}
//求长度:size()
datatype SeqList::get_len(){return this->len;
}
//获取任意位置元素
datatype SeqList::get_index(int index){//判断位置是否合理if(index>this->len||index<=0||index>=this->size){cout<<"位置不合理";return -1;}return this->ptr[index-1];
}
//将顺序表进行排序:sort(bool flag)flag 为真,表示升序,否则是降序
void SeqList::sort(bool flag){if(flag){//升序for(int i=1;i<this->len;i++){for(int j=0;j<this->len-i;j++){if(this->ptr[j]>this->ptr[j+1]){datatype t = this->ptr[j];this->ptr[j] = this->ptr[j+1];this->ptr[j+1] = t;}}}}else{//降序for(int i=1;i<this->len;i++){for(int j=0;j<this->len-i;j++){if(this->ptr[j]<this->ptr[j+1]){datatype t = this->ptr[j];this->ptr[j] = this->ptr[j+1];this->ptr[j+1] = t;}}}}
}
main.cpp
#include "SeqList.h"int main()
{SeqList sl; //实例化一个顺序表对象int n;cout<<"请输入顺序表的大小:";cin>>n;sl.init(n); //申请空间cout<<"请输入插入的数据:(输入#结束)";while(1){string s;cin>>s;if(s=="#"){break;}int e = stoi(s);sl.push_back(e);}sl.show();int add;cout<<"请输入插入数据的位置:";getchar();cin>>add;sl.insert(add);sl.show();cout<<"请输入删除数据的位置:";cin>>add;sl.delete_s(add);sl.show();int c;cout<<"是否尾删(1:YES/2:NO):";cin>>c;if(c==1){sl.pop_back();}sl.show();int l = sl.get_len();cout<<"顺序表当前长度为:"<<l<<endl;int index;cout<<"请输入需要位置:";cin>>index;cout<<index<<"位置数据位:"<<sl.get_index(index)<<endl;cout<<"将顺序表进行排序(1:升序,0:降序):";cin>>c;sl.sort(c);sl.show();return 0;
}