Daily LeetCode – day0004 0622. Design Circular Queue

// 0622. Design Circular Queue
class MyCircularQueue {

    private final int[] nums;
    private int size;
    private final int capacity;
    private int front;
    private int rear;

    public MyCircularQueue(int k) {
        nums = new int[k];
        size = 0;
        capacity = k;
        front = 0;
        rear = 0;
    }

    public boolean enQueue(int value) {
        if (size == capacity) return false;
        nums[rear] = value;
        ++size;
        rear = (rear + 1) % capacity;
        return true;
    }

    public boolean deQueue() {
        if (size == 0) return false;
        --size;
        front = (front + 1) % capacity;
        return true;
    }

    public int Front() {
        if (size == 0) return -1;
        return nums[front];
    }

    public int Rear() {
        if (size == 0) return -1;
        return nums[(rear + capacity - 1) % capacity];
    }

    public boolean isEmpty() {
        return size == 0;
    }

    public boolean isFull() {
        return size == capacity;
    }
}
学习笔记:
这里可以使用数组来实现一个循环队列。
数组大小确定后就不动了,所以可以使用final,然后capacity也确定了也是final。
本来思考的是不用size变量,两个指针都是0开始,但后来发现满和空都是重叠无法判断。
所以做法其实可以数组多开一个位置,这样满就不重叠了。


关于樊轶群

一个善良的理想主义者。
此条目发表在每日LeetCode分类目录。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。