// Cirqueue.h
enum Error{underflow,overflow,success};
const int maxq = 10;
typedef int Queue_entry;
class cirqueue {
public:
cirqueue();//构造队列
bool empty();//判断是否为空
Error serve();//删除队首
Error append(const Queue_entry &item);//入队
Error retrieve(Queue_entry &item);//访问队首元素
Error serve_and_retrieve(Queue_entry &item);
bool full();
private:
int count;
int front, rear;
Queue_entry entry[maxq];
};
cirqueue::cirqueue() {
count = 0;
rear = maxq - 1;
front = 0;
}
bool cirqueue::empty() {
return count == 0;
}
Error cirqueue::append(const Queue_entry &item) {
if (count >= maxq) return overflow;
count++;
rear = ((rear + 1) == maxq) ? 0 : (rear + 1);
entry[rear] = item;
return success;
}
Error cirqueue::serve() {
if (count <= 0) return underflow;
count--;
front = ((front + 1) == maxq) ? 0 : (front + 1);
return success;
}
Error cirqueue::retrieve(Queue_entry &item) {
if (count <= 0) return underflow;
item = entry[front];
return success;
}
bool cirqueue::full() {
return (count == maxq);
}
Error cirqueue::serve_and_retrieve(Queue_entry &item) {
if (count <= 0) return underflow;
item = entry[front];
count--;
front = ((front + 1) == maxq) ? 0 : (front + 1);
return success;
}
//main.c
#include <iostream>
#include <Cirqueue.h>
using namespace std;
int main() {
cirqueue number;
int n;
cin >> n;
while (n!=-1)
{
number.append(n);
cin >> n;
}
while (!number.empty())
{
number.serve_and_retrieve(n);
cout << n << " ";
}
return 0;
}