我在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
答案 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,输出也会循环循环,因此将最新元素打印两次(第一个和最后一个)。