C++——手动封装一个循环顺序队列类

手动封装一个循环顺序队列类(Queue)
私有成员属性:存放队列的数组、两个变量分别记录队头和队尾下标
公有成员函数:入队(push( type value ))
出队(pop())
展示(show)
求队列长度(size()):要求时间复杂度在常量级别
判满(bool full())
判空(bool empty())

 代码如下:

/**
  ******************************************************************************
  * @file              : StackList.cpp
  * @author            : XHJ
  * @date              : 2023/5/9
  * @description       : 手动封装一个循环顺序队列类(Queue)
                            私有成员属性:存放队列的数组、两个变量分别记录队头和队尾下标
                            公有成员函数:入队(push( type value ))
                            出队(pop())
                            展示(show)
                            求队列长度(size()):要求时间复杂度在常量级别
                            判满(bool full())
                            判空(bool empty())
  ******************************************************************************
  */

#include <iostream>

using namespace std;

#define MAXSIZE 100

typedef int datatype;

class Queuelist {
private:
    //数据元素
    datatype data[MAXSIZE];
    //队头:出队在队头
    int front;
    //队尾:入队在队尾
    int rear;
public:
    //构造函数
    Queuelist(int front, int rear) {
        this->front = front;
        this->rear = rear;
    }

    //循环队列入队
    int push(datatype e);

    //循环队列出队
    int pop();

    //循环队列遍历
    void show();

    //求循环队列个数
    int size();

    //循环队列判空
    bool empty();

    //循环队列判满
    bool full();
};

int main() {
    int n;  //插入循环队列的元素个数
    Queuelist queue(0, 0);  //实例化循环队列对象
    cout << "请输入插入循环队列的元素个数:";
    cin >> n;
    datatype e;
    //循环入队
    for (int i = 1; i <= n; ++i) {
        cout << "请输入第" << i << "个元素:";
        cin >> e;
        queue.push(e);
    }
    cout << "循环队列中元素个数:" << queue.size() << endl;
    //循环队列遍历
    queue.show();

    //循环队列出队
    cout << endl << "<-------循环队列出队------->" << endl;
    queue.pop();
    cout << "循环队列中元素个数:" << queue.size() << endl;
    cout << endl << "<-------循环队列出队------->" << endl;
    queue.pop();
    cout << "循环队列中元素个数:" << queue.size() << endl;
}

/**
 * @brief 循环队列入队
 * @param e 入队元素
 * @return 成功返回0,失败返回-1
 */
int Queuelist::push(datatype e) {
    //判断循环队列是否已满
    if (full()) {
        cout << "循环队列已满,入队失败!" << endl;
        return -1;
    }
    //入队
    data[rear] = e;
    rear = (rear + 1) % MAXSIZE;
    return 0;
}

/**
 * @brief 循环队列出队
 * @return 成功返回0,失败返回-1
 */
int Queuelist::pop() {
    //判断循环队列是否为空
    if (empty()) {
        cout << "循环队列已空,出队失败!" << endl;
        return -1;
    }
    //出队
    cout << "出队元素是:" << data[front] << endl;
    front = (front + 1) % MAXSIZE;
    return 0;
}

/**
 * @brief 循环队列遍历
 * @return 成功返回0,失败返回-1
 */
void Queuelist::show() {
    //判断链表是否为空
    if (empty()) {
        cout << "循环队列已空,遍历失败!" << endl;
        return;
    }
    //循环遍历
    cout << endl << "循环队列元素是:" << endl;
    for (int i = front; i != rear; i = (i + 1) % MAXSIZE) {
        cout << data[i] << "  ";
    }
}

/**
 * @brief 求循环队列元素个数
 * @return 返回元素个数
 */
int Queuelist::size() {
    return (rear - front + MAXSIZE) % MAXSIZE;
}

/**
 * @brief 判空
 * @return 空返回true,不空返回false
 */
bool Queuelist::empty() {
    if (front == rear)
        return true;
    else
        return false;
}

/**
 * @brief 判满
 * @return 满返回true,不满返回false
 */
bool Queuelist::full() {
    if (front == (rear + 1) % MAXSIZE)
        return true;
    else
        return false;
}

运行结果如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值