编写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 的循环队列,并演示了如何使用它进行入队、出队和显示操作。