在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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录