跳到主要内容

简述Java数组实现循环队列 ?

参考答案:

循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则,其中元素在队列的末尾添加,并从队列的开头移除。与常规队列不同的是,循环队列在达到其尾部时不会停止,而是会回到开头,形成一个循环。

在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 void enqueue(int value) {
        if (isFull()) {
            System.out.println("队列已满,无法添加元素");
            return;
        }
        queue[rear] = value;
        rear = (rear + 1) % capacity; // 循环队列的关键,当rear到达数组末尾时,它会回到数组的开始位置
    }

    // 出队操作
    public int dequeue() {
        if (isEmpty()) {
            System.out.println("队列为空,无法移除元素");
            return -1;
        }
        int value = queue[front];
        front = (front + 1) % capacity; // 与rear类似,当front到达数组末尾时,它会回到数组的开始位置
        return value;
    }

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

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

这个实现中,enqueue方法用于在队列尾部添加元素,dequeue方法用于从队列头部移除元素。frontrear变量分别指向队列的头部和尾部,当它们达到数组的末尾时,它们会循环回到数组的开始位置。isEmptyisFull方法分别用于检查队列是否为空或已满。