java动态实现循环队列
在Java中,可以使用数组来实现循环队列。以下是一个动态实现循环队列的示例代码:
public class DynamicCircularQueue<T> {
private int maxSize; // 队列的最大容量
private int front; // 队头指针
private int rear; // 队尾指针
private T[] queueArray; // 队列数组
public DynamicCircularQueue(int maxSize) {
this.maxSize = maxSize;
front = 0;
rear = -1;
queueArray = (T[]) new Object[maxSize];
}
public boolean isEmpty() {
return (rear == -1);
}
public boolean isFull() {
return ((rear + 1 == front) || (front == 0 && rear == maxSize - 1));
}
public void enqueue(T item) {
if (isFull()) {
// 扩展队列的容量
T[] newQueueArray = (T[]) new Object[maxSize * 2];
int j = 0;
for (int i = front; i <= rear; i++) {
newQueueArray[j++] = queueArray[i];
}
queueArray = newQueueArray;
front = 0;
rear = j - 1;
maxSize = maxSize * 2;
}
if (rear == maxSize - 1 && front != 0) {
rear = -1;
}
queueArray[++rear] = item;
}
public T dequeue() {
if (isEmpty()) {
throw new NoSuchElementException("Queue is empty");
}
T item = queueArray[front++];
if (front == maxSize) {
front = 0;
}
if (front - 1 == rear) {
front = 0;
rear = -1;
}
return item;
}
public T peek() {
if (isEmpty()) {
throw new NoSuchElementException("Queue is empty");
}
return queueArray[front];
}
}
使用该动态循环队列的示例代码如下:
public class Main {
public static void main(String[] args) {
DynamicCircularQueue<Integer> queue = new DynamicCircularQueue<>(5);
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.enqueue(4);
queue.enqueue(5);
System.out.println(queue.dequeue()); // 输出:1
System.out.println(queue.dequeue()); // 输出:2
queue.enqueue(6);
queue.enqueue(7);
while (!queue.isEmpty()) {
System.out.println(queue.dequeue());
}
}
}
这段代码实现了一个动态的循环队列,当队列满时会自动扩展队列的容量
原文地址: http://www.cveoy.top/t/topic/hZLa 著作权归作者所有。请勿转载和采集!