2017-04-24 11 views
-2

私は今後の試験をしており、この質問に苦労しています。誰かが助けてくれることを望んでいました。先入れ先出しキューを実装するJavaクラス

クラスは、標準の先入れ先出しキューの実装を提供する必要があるインターフェイス

interface StringQueue 
{ boolean isEmpty(); 
void add(String c); 
String front(); 
void removeFront(); 
} 

を実装し、完全なJavaクラスを提供します。キュー内の文字は、QueueCell型のオブジェクトを使用して構成された単一リンクリストに格納する必要があります。このクラスを内部クラスとして記述する必要があります。 (Collections FrameworkのLinkedListクラスは使用しないでください)。 frontおよびremoveFrontメソッドは、空のキューに適用されたときに、QueueException型の例外をスローする必要があります。 QueueExceptionクラスがすでに書かれていると仮定することができます。事前

+1

あなたの質問は何ですか?これは要件のリストに過ぎません –

+0

実装を見るのに役立つとは思いません。確かに、それはあなたが*実装*を学ぶのに役立つことはありません。過去の試験があった場合、今後の試験ではスタックを実施することを尋ねることはほとんどありません。 –

+0

ここであなたの問題は何ですか?グーグルでは、FIFOの仕組みの例を見つけることができます。最初の要素を最初に戻して削除する2つのメソッドとリストの最後に新しい要素を入れる2番目のメソッドを書くのはとても難しいですか? – FilipRistic

答えて

0

おかげで私はあなたが私の実装を見ていると自分自身を書いてみることをお勧め。それ以外の場合は、コピーして貼り付けるだけで、あなたは役に立たなくなります。

インタフェース

public interface StringQueue { 
    boolean isEmpty(); 
    void add(String c); 
    String front(); 
    void removeFront(); 
} 

実装:

public class StringQueueImpl implements StringQueue { 
    private QueueCell head; 
    private int size = 0; 

    @Override 
    public boolean isEmpty() { 
     return false; 
    } 

    @Override 
    public void add(String c) { 
     if(head == null){ 
      head = new QueueCell(c); 
     } else { 
      QueueCell current = head; 
      while(current != null){ 
       if(current.next == null){ 
        current.next = new QueueCell(c); 
        break; 
       } else { 
        current = head.next; 
       } 
      } 
     } 
     size++; 
    } 

    @Override 
    public String front() throws QueueException { 
     if(size == 0 || head == null){ 
      throw new QueueException(); 
     } 
     return head.value; 
    } 

    @Override 
    public void removeFront() throws QueueException { 
     if(size == 0 || head == null){ 
      throw new QueueException(); 
     } 

     if(head.next != null){ 
      head = head.next; 
     } else { // if only 1 element is in the queue 
      head = null; 
     } 
     size--; 
    } 

    private static class QueueCell { 
     private QueueCell next; 
     private String value; 

     QueueCell(String s){ 
      value = s; 
     } 
    } 

    public static class QueueException extends RuntimeException { 
     public QueueException(){ 
      super("Queue is empty"); 
     } 
    } 
} 
+0

どのようにisEmptyを実装しますか? – Yahya

+0

@John 'return size == 0'または' return head == null'を持つ 'boolean'メソッドですが、いずれかが問題ありません。 – Cargeh

1

その簡単試みる

実装:

private LinkedList<E> list = new LinkedList<E>(); 
public void add(E item) { 
    list.addLast(item); 
} 
public E removeFront() { 
    return list.poll(); 
} 
public boolean isEmpty() { 
    return !list.isEmpty(); 
} 
public int size() { 
    return list.size(); 
} 
public void addItems(GenQueue<? extends E> q) { 
    while (q.hasItems()) list.addLast(q.dequeue()); 
} 
+1

コレクションフレームワークからLinkedListクラスを使用してはならないということは分かりませんでしたか? – Cargeh

関連する問題