手动封装一个顺序表(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_back
void 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的空间,将其实地址赋值给ptr
this->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;
}