import java.util.LinkedList;

/** Eine Klasse für Stapel, bzw. Stacks. Ein Stack ist eine
    dynamische Datenstruktur, in die man eine beliebig hohe 
    Anzahl von Objekten einfügen und die in ihr vorhandenen
    wieder aus ihr herausnehmen kann. Dabei gilt das LIFO-Prinzip
    ("last in first out"): Das zuletzt eingefügte Element ist
    dasjenige, das zuerst herausgenommen wird - ganz wie bei 
    einem Stapel Teller z.B.

    LinkedList ist hier ein Overkill - java.util.Stack hätte genügt. 
*/

public class LIFO implements Warteschlange {

    private LinkedList liste;
    
    /** Erzeugt einen leeren Stapel. */
    public LIFO() {

	liste = new LinkedList();
    }

    /** Legt ein Element x auf den Stapel.
	@param x das Element */
    public void in(Object x) {

	liste.addFirst(x);
    }
   
    /** Liefert von einem nicht-leeren Stapel das "oberste Element", sprich
	dasjenige, das unter den im Stapel vorhandenen zuletzt eingetragen 
        wurde. Ist der Stapel leer, so wird null zurückgeliefert.
	@return das Element */
    public Object out() {

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


    /** Testet, ob der Stapel leer ist. */
    public boolean empty() {

	return liste.isEmpty();
    }
}
