import java.util.LinkedList;

/** Eine Klasse für Queues ("Schlangen"). Eine Queue ist eine
    dynamische Datenstruktur, in die man eine beliebige hohe 
    Anzahl von Objekten einfügen und die in ihr vorhandenen
    wieder aus herausnehmen kann. Dabei gilt das FIFO-Prinzip
    ("first in first out"): Das zuerst eingefügte Element ist
    auch dasjenige, das zuerst herausgenommen wird - ganz wie
    bei einer Supermarkt-Schlange.
*/
public class FIFO implements Warteschlange {

    private LinkedList liste;

    /** Erzeugt eine leere Schlange. */
    public FIFO() {

	liste = new LinkedList();
    }
    
    /** Fügt ein Element x in die Schlange ein.
	@param x das einzufügende Element */
    public void in(Object x) {

	liste.addLast(x);
    }

    /** Liefert aus einer nicht-leeren Schlange das Element, das unter den
	in der Schlange vorhandenen zuerst eingetragen wurde. Ist die
	Schlange leer, so wird null zurückgeliefert.
	@return das Element */
    public Object out() {

	if (this.empty()) return null;
	else return liste.removeFirst();
    }

    /** Testet, ob die Schlange leer ist. */
    public boolean empty() {

	return liste.isEmpty();
    }
}
