C++作业

作业:

手动封装一个循环顺序队列类(Stack)

私有成员属性:存放队列的数组、两个变量分别记录队头和队尾下标

公有成员函数: 入队(push( type value ))

                           出队(pop())

                           展示(show)

求队列长度(size()):要求时间复杂度在常量级别

判满( bool full())

判空(bool empty())

#include <iostream>
#define MAX_SIZE 7
using namespace std;

class Stack
{
public:
    Stack():front_sub(0),rear_sub(0)
    {

    }
    int push(int value);//入队
    void pop();//出队
    void show();//输出
    int size();//求队列长度
    bool full();//判满
    bool empty();//判空
private:
    int arr[MAX_SIZE];//存放队列的数组
    int front_sub;//队头的下表
    int rear_sub;//队尾下表

};

int Stack::push(int value)
{
    if(full())
    {
        return  -1;//队列已满
    }else
    {
        arr[rear_sub]=value;//入队
        rear_sub =(rear_sub +1)% MAX_SIZE;
         return 0;//入队成功
    }
}
void Stack::pop()//出队
{
    if(!empty())
    {
        front_sub=(front_sub+1)%MAX_SIZE;
    }
}

void Stack::show()//输出
{
    if(!empty())
    {
        for(int i=front_sub;i!=rear_sub;i=(i+1)%MAX_SIZE)
        {
            cout<<arr[i]<<"";
        }
        cout<<endl;
    }
}
int Stack::size()//求队列长度
{
    return (rear_sub + MAX_SIZE - front_sub)%MAX_SIZE;
}
bool Stack::full()//判满
{
    return (rear_sub + 1) % MAX_SIZE == front_sub;

}
bool  Stack::empty()//判空
{

    return front_sub==rear_sub;
}
int main()
{
    Stack s;
    s.push(1);//入队
    s.push(2);
    s.push(3);
    s.push(4);
    s.push(5);
    s.show();//输出
    cout<<"出队后";
    s.pop();//出队
    cout<<endl;
    s.show();//输出
    cout<<"队列长度= "<<s.size()<<endl;//队列长度
    cout<<"是否队满= "<<s.full()<<endl;//是否队满
    cout<<"是否为满= "<<s.empty()<<endl;//是否队满

    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值