题目

模拟队列:循环数组实现入队出队

思路

本题用循环数组模拟队列的入队、出队。

结构体维护 datafrontrearsize;入队时 rear=(rear+1)%N 写入,出队时 front=(front+1)%N,用 size 判断空/满,避免与 front==rear 歧义。

解题分析

循环队列:rear 入队后 (rear+1)%capfront 出队同理。维护 size 或浪费一个槽位区分满/空。

完整程序

#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) {
            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