描述

请你实现一个循环队列,该循环队列可利用的空间大小等于nn个int型变量的大小。
操作:
push x:将xx加入到循环队列尾端。若循环队列已满,输出"full"(不含引号),否则不输出任何内容。保证xx为int型整数。
front:输出队首元素,队首不出队。若队列为空,输出"empty"(不含引号)。
pop:输出队首元素,且队首出队。若队列为空,输出"empty"(不含引号)。

输入描述:

第一行输入两个整数n,qn,q (1\le n,q \le 10^51n,q105),表示循环队列可利用的空间大小和操作次数。
接下来的qq行,每行一个字符串,表示一个操作。保证操作是题目描述中的一种。

输出描述:

按对应操作要求输出。

示例1

输入:
3 10
push 1
push 2
front
push 3
push 4
pop
pop
pop
front
pop
复制
输出:
1
full
1
2
3
empty
empty
解题思路:
简单的队列操作,需要注意的是输入参数只有push指令时才有两个参数。

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;

int main() {
    int n;
    int q;
    while (cin >> n && cin >> q) {
        queue<int>que;
        for (int i = 0; i < q; i++) {
            string cmd;
            cin >> cmd;
            int num;
            if (cmd == "push") {
                cin >> num;
            }
            
            if (cmd == "push") {
                if (que.size() == n) {
                    cout << "full" << endl;
                } else {
                    que.push(num);
                }
            } else if (cmd == "front") {
                if (que.empty()) {
                    cout << "empty" << endl;
                } else {
                    cout << que.front() << endl;
                }
            } else if (cmd == "pop") {
                if (que.empty()) {
                    cout << "empty" << endl;
                } else {
                    cout << que.front() << endl;
                    que.pop();
                }
            }
        }
        return 0;
    }
}
// 64 位输出请用 printf("%lld")