用Java语言编写一个不连续存储的队列,并实现入队、出队等操作
时间: 2024-12-19 07:15:49 浏览: 10
在Java中,我们可以创建一个基于数组的非连续存储(链式存储)的队列实现,也称为循环队列。这种实现避免了固定大小数组可能导致的问题,如当元素满时需要扩容。下面是简单的实现:
```java
public class DiscreteQueue {
private int[] queueData;
private int front; // 队头指针
private int rear; // 队尾指针
// 初始化队列容量
public DiscreteQueue(int capacity) {
this.queueData = new int[capacity];
this.front = -1;
this.rear = -1;
}
// 入队操作
public void enqueue(int value) {
if (isFull()) {
throw new IllegalStateException("Queue is full");
}
if (front == -1) {
front = rear = 0;
} else {
rear = (rear + 1) % queueData.length; // 循环处理
}
queueData[rear] = value;
}
// 出队操作
public int dequeue() {
if (isEmpty()) {
throw new IllegalStateException("Queue is empty");
}
int removedValue = queueData[front];
if (front == rear) { // 队列只剩下一个元素
front = rear = -1;
} else {
front = (front + 1) % queueData.length; // 循环处理
}
return removedValue;
}
// 检查队列是否为空
public boolean isEmpty() {
return front == -1;
}
// 检查队列是否已满
public boolean isFull() {
return rear == (front + queueData.length - 1) % queueData.length;
}
// 获取队列长度
public int size() {
if (isEmpty()) {
return 0;
}
int length = (rear - front + queueData.length) % queueData.length;
return Math.abs(length); // 返回实际的元素个数,负数转正
}
}
```
阅读全文