当前位置:   article > 正文

Java实现循环队列(简单易懂,解决假溢出)_循环队列java

循环队列java

循环队列的作用是为了解决假溢出的问题。

消除假溢出就是当队尾指针rear和队头指针front到达存储空间最大值QueueSize时,让队尾指针自动转化为存储空间的最小值0。

 再插入数据 6      

 

 

 

下面就说明如何实现上面的操作。

 想要实现这些主要要明白几个判断条件和下标的转换。

  1. 队空时:front与rear相等。
  2. 当尾指针rear和头指针front有效确定队列中有效数据的头尾:
    front%data.length,                     rear%data.length
  3. 如何获取队列数据长度:(rear-front+data.length)%data.length,要加上data.length再取余的原因是因为有两种情况front<=rearfront>rear,当小于时就正常减就行,而大于时减后的值是空出来的空间,再加上数组长度,就最后得出来真实数据长度了。
  4. 判断什么时候队列满了,因为如果front=rear来判断队列满了,就会和判空产生歧义性,所以我们空单元法来解决这种二义性问题。认为的浪费一个单元令队满特征为
    front%data.length == (rear+1)%data.length,
  5. 这上面front取余和rear进行取余最后得到的就是其真正的数组下标。
  1. public class CircularQueue {
  2. public int[] data = new int[5];
  3. public int rear = 0;
  4. public int front = 0;
  5. public void push(int a){
  6. if(front%data.length == (rear+1)%data.length){
  7. System.out.println("队列满了,插入不进去");
  8. }else {
  9. System.out.println("插入了数据a"+a+"再数组下标为"+rear%data.length);
  10. data[rear++%data.length]=a;
  11. }
  12. }
  13. public int pop(){
  14. if (rear==front){
  15. System.out.println("对列以空");
  16. return 0;
  17. }
  18. System.out.println("取出数值是"+data[front%data.length]);
  19. return data[front++%data.length];
  20. }
  21. public int getLength(){
  22. return (rear-front+data.length)%data.length;
  23. }
  24. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/867335
推荐阅读
相关标签
  

闽ICP备14008679号