[英]What is wrong with the implementation of my queue as a list?
我开始创建队列的变量head
和tail
,当然这是列表的元素,我通过编写head = tail = null
在构造函数中创建一个空列表。 在enq
,我创建了一个名为help
的列表的新元素,它应该保存我想要放在列表末尾的新元素(因为它是一个队列)。 当然,队列的tail
始终是我们刚才放在列表末尾的元素。 然后我检查head
是否为空(或者因为列表本身是空的,或者因为我们删除了它的第一个元素,它应该总是与head
相同),并且,如果有必要,我也将head
定义为help
。 然后help
应该显示到列表的新空元素。
问题如下:当我测试我的程序时,它在第一次删除后停止并告诉我列表已经是空的。
我猜错误在于方法deq
。 我想通过编写head = head.next
来删除第一个元素,但我们之前将head
定义为help
,因此, head.next
与help.next
相同,与null
相同,因此boolean
-method返回列表是空的,这会停止程序。
我可能要改变help.next
的“方向”,但我不知道怎么做。 怎么能让整个事情发挥作用?
创建列表的元素:
public class Entry {
Object content;
Entry next;
}
清单的实施:
public class QueueList implements List {
private Entry head;
private Entry tail;
public QueueList() {
head = tail = null;
}
public boolean empty() {
return head == null;
}
public void enq(Object x) {
Entry help = new Entry();
help.content = x;
tail = help;
if (head == null) {
head = help;
}
help.next = null;
}
public Object front() {
return head.content;
}
public void deq() {
head = head.next;
}
}
public void enq(Object x) {
Entry help = new Entry();
help.content = x;
**tail = help;**
if (head == null) {
head = help;
}
help.next = null;
}
任何时候队列中始终只有一个元素。
这可以使用下面的enq()方法解决
public void enq(Object x) {
Entry help = new Entry(x);
if (head == null) {
head = help;
tail = head;
} else {
if (head == tail) {
head.next = help;
tail = help;
} else {
this.tail.next = help;
this.tail = help;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.