循环队列这块思考的几十分钟才彻底想清楚需要注意的地方。
image.png
image.png
- rear指针的位置是不存数值的。front只是表示末端,与该点有没有存储数值没有关系。完全根据rear指针来。
- 因此产生队列为空和满员的时候都是front==rear。因此中间隔一个才实现判断。
- 在这个题中经常要用到下一个位置的坐标是多少,因此最好写一个next的函数
- 也就是说next(rear) == front的时候,表示存满。
rear ==front的时候表示没有数值。
代码如下:
/**
* @author niejian
* @date 2021/8/29 16:41
*/
public class Queue<T> {
private Object[] array;
private int front;
private int rear;
public Queue(int arrayNum) {
array = new Object[arrayNum];
}
public boolean insert(T object) {
if(next(front) == rear) {
return false;
}
array[front++] = object;
return true;
}
public int getSize() {
return front - rear;
}
private int next(int front) {
return (front+1)%array.length;
}
public static void main(String[] args) {
Queue<Integer> queue = new Queue<>(3);
System.out.println(queue.insert(1));
System.out.println(queue.insert(2));
System.out.println(queue.insert(3));
}
}
网友评论