作业:
手动封装一个顺序表(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;
}