思路:因为要求的循环队列是固定容量的,所以不能使用STL自带的队列来实现。
于是使用vector和两个指针:front和rear,以及一个布尔变量来判满,实现固定容量功能;
#include <iostream>
#include <vector>
using namespace std;
class CircularQueue {
private:
vector<int> data;
int front, rear, maxSize;
bool fullFlag;
public:
CircularQueue(int n) : maxSize(n), front(0), rear(0), fullFlag(false) {
data.resize(n);
}
void push(int x) {
if (isFull()) {
cout << "full" << endl;
return;
}
data[rear] = x;
rear = (rear + 1) % maxSize;
fullFlag = (rear == front); // 更新队满标志
}
void pop() {
if (isEmpty()) {
cout << "empty" << endl;
return;
}
cout << data[front] << endl;
front = (front + 1) % maxSize;
fullFlag = false;
}
void frontElement() {
if (isEmpty()) {
cout << "empty" << endl;
return;
}
cout << data[front] << endl;
}
bool isEmpty() {
return (front == rear) && !fullFlag;
}
bool isFull() {
return fullFlag;
}
};
int main() {
int n, q;
cin >> n >> q;
CircularQueue cq(n);
string op;
while (q--) {
cin >> op;
if (op == "push") {
int x;
cin >> x;
cq.push(x);
} else if (op == "pop") {
cq.pop();
} else if (op == "front") {
cq.frontElement();
}
}
return 0;
}