为什么要修改固定数组?

时间:2019-07-12 05:09:38

标签: java data-structures

我在youtube上观看了此视频:https://www.youtube.com/watch?v=8K1rt6v5mJ4&list=PLsyeobzWxl7oRKwDi7wjrANsbhTX0IK0J&index=14来学习Java上的数据结构,更具体地说是队列,精确地复制了作者正在做的事情,在9:46中他的程序打印了6个元素,程序只有5个元素作为限制,他说是循环,但我不明白为什么。

它是通过实现isFull()isEmpty()方法来解决的,但我不太了解为什么它首先发生。

public class Queue {
    private int [] q=new int[5];
    private int size=0;
    private int front=0;
    private int rear=0;
    private int total=5;

    public void enqueue(int item)
    {
        q[rear]=item;
        rear=(rear+1)%total;
        size=size+1;   
    }
    public int dequeue()
    {       
       int item=q[front];
       front=(front+1)%total;
       size=size-1;
       return item;
     }

     public void show()
     {
         System.out.print("Elements: ");

         for(int i = 0; i < size; i++)
         {
             System.out.print(q[(front+i)%total]+" ");
             System.out.println();
         }
         for(int n:q)
         {
             System.out.print(n+" ");
         }
     }
 }

测试使用以下值:

intqueue.enqueue(5);
intqueue.enqueue(2);
intqueue.enqueue(7);
intqueue.enqueue(3);

intqueue.dequeue();
intqueue.dequeue();

intqueue.enqueue(9);
intqueue.enqueue(1);
intqueue.enqueue(19);
intqueue.enqueue(15);

结果是:

for the first for: 15 3 9 1 19 15
for the entire queue: 1 19 15 3 9

1 个答案:

答案 0 :(得分:2)

显示的测试值有8个入队和2个出队。这意味着总和为您添加了6个元素(因此size == 6)到一个只能容纳5个元素的结构中。

根据操作顺序,如果队列数组足够大(例如用int[10]而不是int[5]),则队列将保持:

  7, 3, 9, 1, 19, 15

但是,由于队列只有5个长,因此第一个元素(7个)将被最后一个元素(15个)覆盖,导致5个数组元素仅保留:

3, 9, 1, 19, 15

由于size == 6,输出也会循环循环,因此将最新元素打印两次(第一个和最后一个)。