2017-04-24 2 views
-2

Ich habe eine bevorstehende Prüfung und kämpfe mit dieser Frage, hoffte, jemand könnte bitte helfen.Java-Klasse implementieren First-in-first-out-Warteschlange

eine vollständige Java-Klasse bereitzustellen, die die Schnittstelle

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

Die Klasse implementiert sollte eine Implementierung einer Standard-First-in-first-out-Warteschlange zur Verfügung stellen. Die Zeichen in der Warteschlange sollten in einer einfach verknüpften Liste gespeichert werden, die unter Verwendung von Objekten vom Typ QueueCell erstellt wurde; Sie müssen diese Klasse als innere Klasse schreiben. (Sie dürfen die LinkedList-Klasse nicht aus dem Collections Framework verwenden). Die Methoden front und removeFront sollten eine Ausnahme vom Typ QueueException auslösen, wenn sie auf eine leere Warteschlange angewendet wird. Sie können davon ausgehen, dass die QueueException-Klasse bereits geschrieben wurde.

Vielen Dank im Voraus

+1

Und was ist deine Frage? Dies ist nur eine Liste von Anforderungen –

+0

Ich glaube nicht, dass es Ihnen helfen wird, eine Implementierung zu sehen. Sicher wird es Ihnen nicht helfen, eine Implementierung * zu lernen. Es ist sehr unwahrscheinlich, dass die bevorstehende Prüfung Sie bitten wird, einen Stack zu implementieren ... wenn eine vergangene Prüfung dies getan hat. –

+0

Also, was ist dein Problem hier? Durch einfaches googeln können Sie Beispiele finden, wie FIFO funktioniert. Ist es so schwer, 2 Methoden zu schreiben, zuerst das erste Element zurückzugeben und es zu entfernen, und eine zweite Methode, die neue Elemente am Ende der Liste platziert? – FilipRistic

Antwort

0

Ich rate Ihnen, einen Blick auf meine Implementierung haben und versuchen, Ihre eigenen zu schreiben. Andernfalls, wenn Sie es einfach kopieren und einfügen, wird es Ihnen nichts nützen.

Schnittstelle:

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

Umsetzung:

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

Wie würden Sie isEmpty implementieren? – Yahya

+0

@John nur eine 'boolean' Methode mit' return size == 0' oder 'return head == null', beides ist in Ordnung. – Cargeh

1

Es ist einfach versuchen

Umsetzung:

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

Welcher Teil von 'Sie dürfen die LinkedList-Klasse nicht aus dem Collections Framework verwenden 'Haben Sie das nicht verstanden? – Cargeh