通过万岁!!!
- 题目:构建一个循环队列,然后里面还有几个方法,需要一块构建了。包括增删查,查包括查空、查满、查头、查尾。
- 思路:给一个数组,然后在定义两个指针即可。这里先确定一下,r指针指向队尾(插入的位置),并且r指向的位置是空的,是可以放东西的。l指指向队头(删除的位置),l指向的位置不是空,是可以在满足一定条件下取出来的。并且我们还需要一个变量,来记录队列是不是满了,因为l可能等于r,并且有两种情况会等会,一种是满,一种是空。
- 技巧:数组的使用
java代码
class MyCircularQueue {
int[] queue;
int l = 0, r = 0;
boolean isFull;
int size;
public MyCircularQueue(int k) {
queue = new int[k];
isFull = false;
size = k;
}
public boolean enQueue(int value) {
if (isFull) {
return false;
}
if ((r + 1) % size == l) {// 加完了,满了
queue[(r++) % size] = value;
r %= size;
isFull = true;
return true;
} else {
queue[(r++) % size] = value;
r %= size;
return true;
}
}
public boolean deQueue() {
if (l == r && !isFull) {// 不满,并且两个指针相遇
return false;
} else {
l++;
l = l % size;
isFull = false;
return true;
}
}
public int Front() {
if (l == r && !isFull) {
return -1;
} else {
return queue[l];
}
}
public int Rear() {
if (l == r && !isFull) {
return -1;
} else {
return queue[r - 1 < 0 ? r - 1 + size : r - 1];
}
}
public boolean isEmpty() {
return l == r && !isFull;
}
public boolean isFull() {
return isFull;
}
}
- 总结:题目还是比较简单的,这数据纯数据结构的题目。