简述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
方法用于从队列头部移除元素。front
和rear
变量分别指向队列的头部和尾部,当它们达到数组的末尾时,它们会循环回到数组的开始位置。isEmpty
和isFull
方法分别用于检查队列是否为空或已满。