作业:
手动封装一个顺序表(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 为真,表示升序,否则是降序
头文件:
#ifndef SEQLIST_H
#define SEQLIST_H#include <iostream>using namespace std;
using datatype = int;class Sqlist
{
private:datatype *data; //顺序表数组int size; //数组的大小int len = 0; //数组的实际长度public:void init(int n); //初始化函数bool empty(); //判空bool full(); //判满void push_back(datatype value); //尾插void insert(int index,datatype value); //任意位置插入void erase(int index); //任意位置删除void pop_back(); //尾删int listsize(); //求长度datatype & at(int inex); //获取任意位置元素void sort(bool flag); //排序,真为升序,假为降void show(); //展示
};#endif // SEQLIST_H
源文件:
#include "seqlist.h"void Sqlist::init(int n)
{this->data = new datatype[n];//申请长度n的空间,附给data//初始化this->len = 0;this->size = n;
}
//判空
bool Sqlist::empty()
{return this->len == 0;
}
//判满
bool Sqlist::full()
{return this->len == this->size;
}
//尾插
void Sqlist::push_back(datatype value)
{if(this->full()){return;}this->data[len++] = value;
}
//任意位置插入
void Sqlist::insert(int index, datatype value)
{if(this->full()){cout<<"表满了无法插入"<<endl;return;}if(index>this->len||index<=0){cout<<"插入位置错误"<<endl;return;}for(int i = this->len;i>index-1;i--){data[i] = data[i-1];}data[index-1] = value;this->len++;
}
//任意位置删除
void Sqlist::erase(int index)
{if(this->empty()){cout<<"表为空无删除对象"<<endl;return;}if(index>this->len||index<=0){cout<<"删除位置错误"<<endl;return;}for(int i = index-1;i<this->len-1;i++){data[i] = data[i+1];}this->len--;
}
//尾删
void Sqlist::pop_back()
{if(this->empty()){cout<<"表为空无删除对象"<<endl;return;}this->len--;
}
//求长度
int Sqlist::listsize()
{return this->len;
}
//获取任意位置元素
datatype & Sqlist::at(int index)
{if(this->empty()){throw std::out_of_range("表为空无对象");}if(index>this->len||index<=0){throw std::out_of_range("位置错误");}return this->data[index-1];
}
//排序,真为升序,假为降
void Sqlist::sort(bool flag)
{if(this->empty()){cout<<"表为空无对象"<<endl;return;}int i,j;if(flag){for(i = 1;i<this->len;i++){for(j = 0;j<this->len - i;j++){if(data[j]>data[j+1]){datatype temp = data[j];data[j] = data[j+1];data[j+1] = temp;}}}}else{for(i = 1;i<this->len;i++){for(j = 0;j<this->len - i;j++){if(data[j]<data[j+1]){datatype temp = data[j];data[j] = data[j+1];data[j+1] = temp;}}}}
}
//展示
void Sqlist::show()
{if(this->empty()){cout<<"表为空无对象"<<endl;return;}cout<<"当前顺序表中的元素分别是:";for(int i = 0;i<this->len;i++){cout<<this->data[i]<<" ";}cout<<endl;
}
主程序:
#include "seqlist.h"
int main()
{Sqlist s; //实例化一个顺序表对象s.init(5);//申请空间s.push_back(3);//头插s.push_back(4);s.push_back(2);s.show();s.insert(2,8);//任意位置插入s.show();s.erase(1);//任意位置删除s.show();s.pop_back();//尾删s.show();cout<<"长度 = "<<s.listsize()<<endl;cout<<"2号位置元素 = "<<s.at(2)<<endl;s.sort(1);s.show();return 0;
}