622. 设计循环队列 - 力扣(LeetCode) (leetcode-cn.com)
思路:
①根据给出的k值创建数组arr,大小为k
创建指针head表示头,tail表示尾,注意tail所指的下标不在队列之内
size用来表示当前队列中的有效元素的数量
②要添加一个元素时
先判断队列是否为空,如果size=arr的长度了,队列已满,添加失败
如果小于,直接给tail所在的位置进行赋值,size++,同时tail移动到 下一个位置(tail+1)% arr.length
③要删除一个元素时
先判断队列内是否还有元素,如果size==0,说明没有元素,返回false;
如果存在元素,直接让head移动到下一个位置 (head+1)%arr.length 即可,同时size--;
④返回队首元素,即返回head所在位置的元素,如果队列没有元素返回-1
⑤返回队尾元素,返回tail所在位置的上一个元素,即(tail-1+arr.length)%arr.length 所在位置的元素
class MyCircularQueue {
public int[]arr;
public int head;
public int tail;
public int size;
public MyCircularQueue(int k) {
arr=new int[k];
}
public boolean enQueue(int value) {
if(size==arr.length){
return false;
}
arr[tail]=value;
tail=(tail+1)%(arr.length);
size++;
return true;
}
public boolean deQueue() {
if(size==0){
return false;
}
head=(head+1)%(arr.length);
size--;
return true;
}
public int Front() {
if(size==0){
return -1;
}
return arr[head];
}
public int Rear() {
if(size==0){
return -1;
}
int index=(tail-1+arr.length)%(arr.length);
return arr[index];
}
public boolean isEmpty() {
if(size==0){
return true;
}
return false;
}
public boolean isFull() {
if(size==arr.length){
return true;
}
return false;
}
}