题目
模拟队列:循环数组实现入队出队
思路
本题用循环数组模拟队列的入队、出队。
结构体维护 data、front、rear、size;入队时 rear=(rear+1)%N 写入,出队时 front=(front+1)%N,用 size 判断空/满,避免与 front==rear 歧义。
解题分析
循环队列:rear 入队后 (rear+1)%cap,front 出队同理。维护 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