数组模拟环形队列

127 阅读1分钟

思路分析

  • 先进先出
  • front 队头指针 初始值为0 指向队列的第一个元素
  • rare 队尾指针 初始值为0 指向队列的最后一个元素的后一个位置,因为希望留出一个空间作为约定。
  • maxSize队列的最大容量,初始化时候传入
  • 队列空的条件:rare == front;
  • 队列满的条件:(rare + 1) % maxSize == front;

代码

public class CycleArrayQueue {
    private int[] arr;
    private int maxSize;
    //队头指针 初始值为0 指向队列的第一个元素
    private int front;
    //队尾指针 初始值为0 指向队列的最后一个元素的后一个位置,因为希望留出一个空间作为约定。
    private int rare;
    //构造函数
    public CycleArrayQueue(int size) {
        this.maxSize = size;
        this.arr = new int[size];
        rare = 0;
        front = 0;
    }
    //判断队列是否已满
    public boolean isFull() {return (rare + 1) % maxSize == front; }
    //判断队列是否为空
    public boolean isEmpty() { return rare == front; }
    //入队
    public void enQueue(int value) {
        if (isFull()) {
            System.out.println("队列已满");
            return;
        }
        this.arr[rare] = value;
        this.rare = (rare + 1) % maxSize;
    }
    //出队
    public int getQueue() {
        if (isEmpty()) {
            throw new RuntimeException();
        }
        int value = arr[front];
        front = (front + 1) % maxSize;
        return value;
    }
    //遍历队列
    public void showQueue() {
        if (isEmpty()) {
            System.out.println("队列为空");
        }
        int index = front;
        System.out.print("队列:");
        while ((index) % maxSize != rare) {
            System.out.print(arr[index] + "\t");
            index = (index + 1) % maxSize;
        }
    }
}