队列 622. 设计循环队列

队列里面最难的也就循环队列了,循环队列思路简单

1.用数组模拟队列,先进先出,

2.通过对长度取余的方式来排放尾巴

3.队列null为 head == tail,队列满 (tail + 1)/length = head,可知会浪费一个存储空间

public class MyCircularQueue {
    int[] array;
    int head = 0;
    int tail = 0;
    int length = 0;
<pre><code>public MyCircularQueue(int k) {
    array = new int[k + 1];
    Arrays.fill(array, -1);
    length = array.length;
}

public boolean enQueue(int value) {
    if ((tail + 1) % length == head) {
        return false;
    }
    array[tail%length] = value;
    tail++;
    return true;
}

public boolean deQueue() {
    if (head == tail)
        return false;
    array[head] = -1;
    head++;
    return true;
}

public int Front() {
    return array[head];
}

public int Rear() {
    return array[tail - 1];
}

public boolean isEmpty() {
    return head == tail;
}

public boolean isFull() {
    return (tail + 1) % length == head;
}

public static void main(String[] args) {
    MyCircularQueue circularQueue = new MyCircularQueue(3); // 设置长度为 3
    System.out.println(circularQueue.enQueue(1));
    System.out.println(circularQueue.enQueue(2));
    System.out.println(circularQueue.enQueue(3));
    System.out.println(circularQueue.enQueue(4));
    System.out.println(circularQueue.Rear());
    System.out.println(circularQueue.deQueue());
    System.out.println(circularQueue.isFull());
    System.out.println(circularQueue.Rear());
}

}