题目

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

思路

本题用循环数组模拟队列的入队、出队。 结构体维护 data、front、rear、size;入队时 rear=(rear+1)%N 写入,出队时 front=(front+1)%N,用 size 判断空/满,避免与 front==rear 歧义。

解题分析

数组或 Queue:rear 入队后 (rear+1)%cap,front 出队同理。维护 size 或浪费一个槽位区分满/空。

完整程序

import java.io.*;

public class Main {
    public static void main(String[] args) {
        int[] q = new int[8]; int front = 0, rear = 0, size = 0;
        int op = 1;
        if (op == 1) {
            int x = 10;
            if (size < 8) {
                q[rear] = x;
                rear = (rear + 1) % 8;
                size++;
            }
        } else if (op == 0) {
            if (size == 0) System.out.println("empty");
            else {
                System.out.println(q[front]);
                front = (front + 1) % 8;
                size--;
            }
        }
        int op = 1;
        if (op == 1) {
            int x = 20;
            if (size < 8) {
                q[rear] = x;
                rear = (rear + 1) % 8;
                size++;
            }
        } else if (op == 0) {
            if (size == 0) System.out.println("empty");
            else {
                System.out.println(q[front]);
                front = (front + 1) % 8;
                size--;
            }
        }
        int op = 0;
        if (op == 1) {
            int x = 0;
            if (size < 8) {
                q[rear] = x;
                rear = (rear + 1) % 8;
                size++;
            }
        } else if (op == 0) {
            if (size == 0) System.out.println("empty");
            else {
                System.out.println(q[front]);
                front = (front + 1) % 8;
                size--;
            }
        }
        int op = -1;
        if (op == 1) {
            int x =
            if (size < 8) {
                q[rear] = x;
                rear = (rear + 1) % 8;
                size++;
            }
        } else if (op == 0) {
            if (size == 0) System.out.println("empty");
            else {
                System.out.println(q[front]);
                front = (front + 1) % 8;
                size--;
            }
        }
    }
}

运行示例

输出:

10
20