题目
leetcode:622设计循环队列
主要代码
//循环设计队列
class MyCircularQueue{
public int[] queue;
public int l, r, size, limit;
//方法,新建一个循环队列(用数组的形式)
//同时在队列里的数字个数不要超过k
public MyCircularQueue(int k){
queue = new int[k];
l = r = size = 0;
limit = k;
}
public boolean isEmpty(){
return size == 0;
}
public boolean isFull(){
return size == limit;
}
public boolean enQueue(int num){
//如果队列满了,什么也不做,返回false
//如果队列没满,就加入value,返回true
if(isFull()){
return false;
}else{
queue[r] = num;
r = r == limit - 1 ? 0 : (r + 1);//这个比取模要好懂
size++;
return true;
}
}
public boolean deQueue(){
if(isEmpty()){
return false;
}else{
l = l == limit - 1 ? 0 : (l + 1);
size--;
return true;
}
}
//返回队列头部数字
public int Front(){
if(isEmpty()){
return -1;
}else {
return queue[l];
}
}
//返回尾部数字
public int Rear(){
if(isEmpty()){
return -1;
}else{
/*新加入的数字是放在r位置上的
* 并且是循环队列
* 所以 队尾的位置就应该在r-1 或者 limit-1 的位置*/
int last = r == 0 ? (limit-1) : (r - 1);//不太好表示,所以引入last
return queue[last];
}
}
}
运行结果
纠错
简写
public boolean isEmpty(){
if(l == r){
return true;
}
}
这个写法多了,方法体可以直接写return l == r
方法错误地被当作变量使用
主要是leetcode每提示,手敲的,然后也没看懂报错,要是看懂的我肯定就不往上放了