跳到主要内容

编写Java代码实现循环队列?

参考答案:

循环队列(Circular Queue)是一种特殊的队列,它使用固定大小的数组和两个指针(front 和 rear)来跟踪队列的开始和结束。当队列为空时,front 和 rear 都指向队列的起始位置。当元素入队时,rear 指针向前移动。当元素出队时,front 指针向前移动。当指针到达数组的末尾时,它们会循环回到数组的开头。

以下是一个简单的循环队列的 Java 实现:

public class CircularQueue {
    private int[] queue;
    private int front;
    private int rear;
    private int capacity;

    public CircularQueue(int capacity) {
        this.capacity = capacity;
        queue = new int[capacity];
        front = 0;
        rear = 0;
    }

    // 检查队列是否为空
    public boolean isEmpty() {
        return front == rear;
    }

    // 检查队列是否已满
    public boolean isFull() {
        return (rear + 1) % capacity == front;
    }

    // 入队操作
    public void enqueue(int item) {
        if (isFull()) {
            System.out.println("Circular Queue is full. Cannot add elements.");
            return;
        }
        queue[rear] = item;
        rear = (rear + 1) % capacity;
    }

    // 出队操作
    public int dequeue() {
        if (isEmpty()) {
            System.out.println("Circular Queue is empty. Cannot dequeue elements.");
            return -1;
        }
        int item = queue[front];
        front = (front + 1) % capacity;
        return item;
    }

    // 显示队列
    public void display() {
        if (isEmpty()) {
            System.out.println("No elements in the Circular Queue.");
            return;
        }
        for (int i = front; i != rear; i = (i + 1) % capacity) {
            System.out.print(queue[i] + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        CircularQueue cq = new CircularQueue(5);

        cq.enqueue(1);
        cq.enqueue(2);
        cq.enqueue(3);
        cq.enqueue(4);
        cq.enqueue(5);

        cq.display();  // 输出: 1 2 3 4 5 

        cq.dequeue();
        cq.dequeue();

        cq.display();  // 输出: 3 4 5 

        cq.enqueue(6);
        cq.enqueue(7);

        cq.display();  // 输出: 3 4 5 6 7 
    }
}

这个实现定义了一个循环队列,并提供了基本的队列操作,如入队(enqueue)、出队(dequeue)和检查队列是否为空或已满。此外,还提供了一个显示队列内容的方法。在 main 方法中,我们创建了一个容量为 5 的循环队列,并演示了如何使用它进行入队、出队和显示操作。