用标记法判断循环队列队空队满的代码
时间: 2024-10-09 12:02:41 浏览: 31
在使用标记法(也称为“哨兵元素”或“边界检查”)来判断循环队列是否为空或满的代码中,通常会在队列的一端添加一个特殊的元素作为队列的开始(头)或结束(尾)。这里是一个简单的基于数组实现的循环队列示例:
```java
public class CircularQueue {
private int[] queue;
private int front; // 前面的节点索引
private int rear; // 后面的节点索引
private int capacity;
public CircularQueue(int size) {
capacity = size;
queue = new int[capacity];
front = rear = -1; // 初始化时队列为未满状态
}
// 入队操作
public boolean enqueue(int value) {
if ((rear + 1) % capacity == front) { // 队满条件
return false;
} else {
rear = (rear + 1) % capacity; // 更新尾部指针
queue[rear] = value;
return true;
}
}
// 出队操作
public int dequeue() {
if (front == -1) { // 队空条件
throw new EmptyQueueException();
} else {
int removedValue = queue[front]; // 保存并移除头部值
front = (front + 1) % capacity; // 更新头部指针
return removedValue;
}
}
// 判断队列是否为空
public boolean isEmpty() {
return front == -1;
}
// 判断队列是否已满
public boolean isFull() {
return (rear + 1) % capacity == front;
}
}
```
在这个例子中,当队列满时,`enqueue`会返回`false`;当队列空时,`dequeue`会抛出异常。`isEmpty()`和`isFull()`方法分别用于快速判断队列的状态。
阅读全文