题目

使用固定容量的循环数组结构实现一个简易先进先出队列(FIFO Queue),支持入队(push)、出队(pop)以及判空判满操作。

输入格式:多行指令:1 x 表示将 x 入队;0 表示出队并打印该值(队空输出 empty);-1 结束程序。

输出格式:响应出队操作,分行输出出队元素或 empty。

数据范围与约定:队列容量为 32。

思路与算法

1. 循环队列下标回绕
维护队头指针 front 和队尾指针 rear,移动时通过模运算 (idx + 1) % CAPACITY 实现数组空间的循环复用。

2. 判空与判满约定
常用方式:维护一个独立的 count 记录当前队列元素个数。入队时 count < CAPACITY,出队时 count > 0,逻辑清晰不易混淆。

完整程序

#include <stdio.h>

int main(void)
{
    // 循环队列:利用取模实现环状数组,首尾指针滚动向前
    int q[8], front = 0, rear = 0, size = 0;
    for (;;) {
        int op;
        if (scanf("%d", &op) != 1) {
            break;
        }
        if (op == -1) {
            break;
        }
        if (op == 1) {
            // 入队操作
            int x;
            scanf("%d", &x);
            if (size >= 8) {
                continue; // 队满保护
            }
            q[rear] = x;
            rear = (rear + 1) % 8;
            size++;
        } else if (op == 0) {
            // 出队操作(先进先出 FIFO)
            if (size == 0) {
                printf("empty\n");
            } else {
                printf("%d\n", q[front]);
                front = (front + 1) % 8;
                size--;
            }
        }
    }
    return 0;
}

运行示例

输入:

1 10
1 20
0
0
-1

输出:

10
20