9.20作业

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

运行结果

在这里插入图片描述

思维导图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值