2023/5/9

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

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

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

                           出队(pop())

                           展示(show)

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

判满( bool full())

判空(bool empty())

运行结果:

 

#include <iostream>

#define MAX_SIZE 7

using namespace std;

class Stack
{

private:

    int arr[MAX_SIZE];

    int front_sub = 0;

    int rear_sub = 0;


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

    }

    int push(int value)            //入队
    {
        if(full())
            return -1;
        else
        {
            arr[rear_sub] = value;
            rear_sub = (rear_sub + 1) % MAX_SIZE;
            return 0;
        }
    }

    void pop()         //出队
    {
        cout << "出队";
        if(!empty())
            front_sub = (front_sub + 1) % MAX_SIZE;
    }

    void show()            //输出
    {
        if(!empty())
        {
            cout << "输出的结果是:";
            int i = front_sub;
            for(i;i!=rear_sub;i=(i+1)%MAX_SIZE)
            {
                cout << arr[i] << "  ";

            }

            cout << endl;
        }
    }

    int size()            //求长度
    {
        return (rear_sub + MAX_SIZE - front_sub)%MAX_SIZE;
    }

    bool full()            //判空
    {
        return (rear_sub + 1) % MAX_SIZE == front_sub;
    }

    bool empty()            //判满
    {
        return front_sub==rear_sub;
    }



};
int main()
{

    Stack s;
    int num = 0;

    int len = 0;

    cout << "请输入要入队的数据的个数:";
    cin >> len;

    cout << "请输入要入队的数据:";

    for(int i = 0;i<len;i++)
    {
        cin >> num;
        s.push(num);
    }

    s.show();//输出

    s.pop();//出队

    s.show();//输出
    cout<<"队列长度= "<<s.size()<<endl;//队列长度
    cout<<"是否队满= "<<s.full()<<endl;//是否队满
    cout<<"是否为满= "<<s.empty()<<endl;//是否队满


    cout << "Hello World!" << endl;

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值