如何解决下面是使用数组实现队列而不使用计数器来计算其中元素数量的代码有人可以向我解释一下吗?
我一直试图理解下面给出的代码。这是使用数组实现队列,但在插入和删除时不计算队列内的元素,即仅使用后索引和前索引。这背后的想法是将数组的大小增加1,以便“isFull()”和“isEmpty()”的条件不同。
我想知道添加1个额外索引是如何解决区分满和空的问题的。这些方法对我来说没有意义。
public class QueueWo {
private int maxSize;
private long[] arr;
private int rear;
private int front;
public QueueWo(int s) {
maxSize = s + 1;
arr = new long[maxSize];
rear = -1;
front = 0;
}
public void insert(long j) {
if(rear == maxSize - 1)
rear = -1;
arr[++rear] = j;
}
public long remove() {
long temp = arr[front++];
if(front == maxSize)
front = 0;
return temp;
}
public long peek() {
return arr[front];
}
public boolean isEmpty() {
return rear + 1 == front || front + maxSize - 1 == rear;
}
public boolean isFull() {
return rear + 2 == front || front + maxSize - 2 == rear;
}
public int size() {
if(rear >= front)
return rear - front + 1;
else
return (maxSize - front) + (rear + 1);
}
}
解决方法
您创建一个固定大小的数组并开始将元素放入其中。一旦你通过排队元素到达结尾,你就从数组的开头开始,以循环方式依此类推。执行此操作时,您的前端会在每次移除时向前移动一个索引,并在到达终点时从头开始。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。