// 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开始,但后来发现满和空都是重叠无法判断。
所以做法其实可以数组多开一个位置,这样满就不重叠了。