我目前正在为我的编程考试进行修改,我在过去的一篇论文中遇到了一个让我相当困惑的问题。
我有两个类,队列和节点,如下所示。
该问题指出,我必须通过将必要的代码添加到将存储在队列中的所有数据打印到控制台的 inspectQueue 方法中来扩展 Queue 类的行为。
我能想到的唯一解决方案,它非常弱,是有一个简单的 ArrayList 并且每次元素入队/出队时,然后将节点添加到列表中/从列表中删除节点。
我是否有更好的解决方案?我真的很感激一些指导。
我已经评论了我实现“解决方案”的代码,其余代码是它在试卷中的显示方式。
谢谢你的时间。
队列.java
public class Queue {
protected Node head;
protected Node last;
//added by me
private ArrayList<Node> nodes = new ArrayList<Node>();
//end my add
public boolean isEmpty() {
return (this.head == null);
}
public void enqueue(Object d) {
Node n = new Node();
n.setData(d);
nodes.add(n); //added by me
if (this.isEmpty()) {
head = n;
last = n;
}
else {
last.setNext(n);
last = n;
}
}
public Object dequeue() {
if(this.isEmpty()) {
this.last = null;
return null;
}
else {
Node h = this.head;
nodes.remove(h); //added by me
head = h.getNext();
return h.getData();
}
}
public Object peek() {
if(this.isEmpty()) {
return null;
}
else {
Node t = this.head;
return t.getData();
}
}
public void clearQueue() {
this.head = null;
this.last = null;
}
public void inspectQueue() {
//added by me (all below)
System.out.println("Inspecting Queue: (contains " + nodes.size() + " nodes)");
for(Node n : nodes) {
System.out.println(n.getData());
}
}
}
节点.java
public class Node {
protected Object data;
protected Node next;
public void setNext(Node e) {
this.next = e;
}
public Node getNext() {
return this.next;
}
public void setData(Object d) {
this.data = d;
}
public Object getData() {
return this.data;
}
}