【LeetCode622】设计环形队列
题目描述
提交结果
代码实现
class MyCircularQueue {
private int size
;
private int head
;
private int tail
;
private int[] arr
;
public MyCircularQueue(int k
) {
arr
= new int[k
];
}
public boolean enQueue(int value
) {
if(size
== arr
.length
){
return false;
}
arr
[tail
] = value
;
tail
= tail
== arr
.length
- 1 ? 0 : tail
+ 1;
size
++;
return true;
}
public boolean deQueue() {
if(size
<= 0){
return false;
}
head
= head
== arr
.length
? 0 : head
+ 1;
size
--;
return true;
}
public int Front() {
if(size
== 0){
return -1;
}
return arr
[head
];
}
public int Rear() {
if(size
== 0){
return -1;
}
if(tail
== 0){
return arr
[arr
.length
- 1];
}
return arr
[tail
- 1];
}
public boolean isEmpty() {
return size
== 0;
}
public boolean isFull() {
return size
== arr
.length
;
}
}
维护一个首尾指针,head,tail。
维护环形的关键就是,tail == arr.length - 1 ,head == arr.length - 1,时就回到数组开始位置即可。
维护一个size变量相对来说比较简单,来存储队列中的元素个数。否则很难统计出当前队列中的元素个数。