问题探讨:
单向数组实现环形队列的缺点:不能充分利用数组空间
针对单向数组的改进:
环形队列的思想:
1.front含义改变:front指向队列的第一个元素,初始化front=0
2.rear含义改变:指向队列最后一个元素的后一个位置,空出一个空间作为约定,初始化rear=0;(rear前一个元素为队列的最后一个元素,rear指向空位置的)
3.队满条件:(rear+1)%maxsize=front
(我们大可想象成一个收尾相连的环形数组(不太严谨,我的鄙见),rear+1就相当于指向了front,但要保证队满,转变了思想,巧妙的运用到取模,若有错误,希望多多指教)
4.队空条件:rear=front
5.队列有效的数据个数(rear+maxsize-front)%maxsize 例如上图:(7+8-0)%8=7
改进内容:
1.队满条件
//判断是否队满
public boolean isFull(){
return (rear+1)%MAXSIZE==front;
}
2.入队指针移动
//添加内容,入队
public void enqueue(int number){
if(isFull()){
throw new RuntimeException("队列已满,不能加入!");
}
//rear本身指向最后元素的下一个位置,直接加入,指针后移
arrQueue[rear]=number;
rear=(rea