0

私は現在、プログラミング試験の修正を行っていますが、過去の論文からかなり混乱している質問に出くわしました。

以下に示すように、Queue と Node の 2 つのクラスがあります。

この質問は、キュー内に保存されているすべてのデータをコンソールに出力する必要なコードを inspectQueue メソッドに追加することによって、Queue クラスの動作を拡張する必要があることを示しています。

私が考えることができる唯一の解決策は、非常に弱いですが、単純なArrayListを持ち、要素がキューに入れられたりキューから取り出されたりするたびに、ノードをリストに追加/リストから削除することです。

私が見落としているより良い解決策はありますか?アドバイスをいただければ幸いです。

「解決策」を実装したコードにコメントしました。残りのコードは、試験用紙にどのように表示されるかです。

御時間ありがとうございます。

Queue.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());
     }
}



}

Node.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;
}


}
4

4 に答える 4

3

ノードはリンクされたリストを形成するので、そうするだけです

public void inspectQueue() {
    Node n = head;
    while (n != null) {
        System.out.println(n.getData());
        n = n.getNext();
    }
}
于 2013-04-04T12:54:34.607 に答える
1

配列は必要ありません。その情報は Nodenextプロパティに格納されています。

public void inspectQueue() {
    Node current = head;
    while(current != null) {
        System.out.println(n.getData());
        current = current.getNext();
    }
}

そのデータ構造は連結リストと呼ばれます。

于 2013-04-04T12:54:12.707 に答える
0

より簡単な解決策は、queue.headを使用してノードのリンクされたリストを開始し、走査しnode.nextながらデータを出力することです。

于 2013-04-04T12:53:30.227 に答える