在我的循环数组队列中,有一些部分还没有完成,但我已经完成了足够的工作,我的主要方法可以发挥作用。然而,由于某种原因,当我使用我的出列函数时,它似乎在检索前端时工作正常,但与再次显示队列时相比,我的所有项目都不会显示,但队列仍然可以检索前端并迭代到下一个项目。
我曾尝试在线查看其他出列方法,以了解我可能出错的地方,但没有效果,因为它们看起来都与我的方法类似。我检查了是否必须将队列[frontIndex]设置为空,但当我将其设置为下一个变量时,它不会删除上一个项目,也不会正确显示,即:1-2-3-4-5(出列后)2-2-4-4
这些是我的变量以及我的出列方法
private T[] queue; //Circular array of queue entries and one unused element
private int frontIndex;
private int backIndex;
private boolean integrityOK;
private static final int DEFUALT_CAPACITY = 50;
private static final int MAX_CAPACITY = 10000;
/////////////////////////THE ISSUE///////////////////
@Override
public T dequeue() {
//Start of if
if(isEmpty()) {
System.out.println("Queue is empty");
}//End of if
//retrieve front than delete it
T front = queue[frontIndex];
queue[frontIndex] = null;
frontIndex = (frontIndex + 1) % queue.length;
return front;
}
/////////////////THE ISSUE///////////////////
这也是我的toString方法
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
int temp = 0;
sb.append("queue: ( ");
if(queue.length == 0) {
sb.append("empty queue");
}
while(queue[temp]!=null) {
sb.append(queue[temp].toString());
sb.append("--->");
temp++;
}
sb.append(")");
return sb.toString();
}
这是我的主类中的im测试方法
public static void testIntegers() {
System.out.println("\n\nTesting with some integers");
ArrayQueue<Integer> myIntegerQueue = new ArrayQueue<>();
int testSet[] = { 1, 2, 3, 4, 5 };
for (int i = 0; i < testSet.length; i++) {
myIntegerQueue.enqueue(testSet[i]);
}
System.out.println(myIntegerQueue);
for (int i = 0; i < testSet.length; i++) {
System.out.println("Dequeue " + myIntegerQueue.getFront());
myIntegerQueue.dequeue();
// System.out.println("Dequeue " + myIntegerQueue.dequeue());
System.out.println(myIntegerQueue);
}
// What happens if we try to dequeue from an empty queue?
System.out.println("Dequeue " + myIntegerQueue.getFront());
myIntegerQueue.dequeue();
System.out.println(myIntegerQueue);
}
这是它显示的内容
Testing with some integers
queue: ( 1--->2--->3--->4--->5--->)
Dequeue 1
queue: ( )
Dequeue 2
queue: ( )
Dequeue 3
queue: ( )
Dequeue 4
queue: ( )
Dequeue 5
queue: ( )
Queue is empty
Dequeue null
Queue is empty
queue: ( )
第一次出队后的预期结果
队列:(2---
实际结果
队列: ( )
有人能告诉我或者指引我正确的方向,我做错了什么,因为我不知所措。提前感谢!
在<code>toString(),然后在while循环中,条件<code>while(队列[temp]!=null),这意味着该循环查看数组<code>队列的最开始,并检查它是否为<code>null,而不是由<code>frontIndex索引的第一个元素。第一次出列时,将数组中的第一个索引设置为null
,这将导致toString()
方法中的while
loop由于条件while(队列[temp]=null)
而无法运行。不要设置temp=0
,而是将其设置为temp=frontIndex
这将按预期打印队列。
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
int temp = frontIndex;
sb.append("queue: ( ");
if(queue.length == 0) {
sb.append("empty queue");
}
while(queue[temp]!=null) {
sb.append(queue[temp].toString());
sb.append("--->");
temp++;
}
sb.append(")");
return sb.toString();
}
我的取消排队方法目前也不会删除我想要的项,而是从集合中删除最后一个元素。例如 如果我添加元素:1,2,3我的toString方法将按预期返回1,2,3。 然后,当我使用我的驱动程序调用 dequeue 时,它应该取消第 0 个元素的排队,在本例中为 1。 尽管该方法表示“已从队列中删除元素1”,提示<code>T result 然后,当我再次调用enqueue方法时,在同一个队列上,如果我将字符串
假设我有一个大小为[10]的数组,当该数组被填满时,我想实现一个FIFO结构,而不是它只是填满了,因此无法向数组中添加新的东西,并抛出旧的东西。 例如,如果我有一个包含汽车制造商的字符串数组,当我的数组中有10个制造商时,我希望删除最旧的条目,添加最新的条目,但要考虑kepping FIFO。我如何在这样的方法中实现它:
我正在尝试写入优先级队列。对于我的排队方法,我的逻辑是: 如果列表为空,则将事务添加到链接列表中的第一个节点 如果列表不为空,请将列表中事务对象的时间值与当前对象进行比较,如果对象的时间大于链表中的对象,则将对象插入当前索引。 否则,只需将它们添加到linkedlist的最后一个元素 我通过在方法中输入4个值来测试此方法,并相应地输入200020003000。 当我尝试从列表中除名时,它给我一个空
我有一个用于队列的迭代器类(实现为循环数组)。我在下面附上代码。问题出在++运算符上。一旦它到达数组的末尾,它就会回到它的开始,因此迭代器会指向第一个元素。它工作得很好,但我没有办法使用这种方法实现then end()迭代器。在队列类中返回begin()和end()迭代器的函数可以在底部看到。end()迭代器应该指向队列的后部,但是当数组已满且后部等于数组的大小时,++运算符将循环返回,而不是让它
到目前为止,这就是我的答案,但从逻辑上讲,我的答案对于findNextCity方法似乎是错误的。此外,我甚至不知道如何处理问题的第二部分(以下)。 我应该遍历cityQueue中的每个元素,使用下一种方法计算的欧几里德距离(distbetweencies),确定哪个元素最接近当前城市(从第一个参数)。我必须忽略已经标记在堆栈中或堆栈中的城市以及当前城市本身(否则,城市将始终是离自身最近的城市!)。
我正在从Sahni的“C语言数据结构基础”中学习数据结构。在使用动态数组的循环队列中,作者提到了以下几点, 假设capacity是循环队列的初始容量,我们必须首先使用realloc增加数组的大小,这将把最大容量元素复制到新的数组中。为了获得正确的循环队列配置,我们必须将右段中的元素(即元素a和B)滑动到数组的右端(参见图3.7.d)。数组加倍和向右滑动一起最多复制2*容量-2个元素。