import java.util.Stack;

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

    Stapel ist im wesentlichen nur eine Maskierung der Klasse
    Stack aus den Java-Bibliotheken. Dies wurde gemacht, um 
    die gleichen Methodennamen wie in der Klasse Queue zu haben.
*/

public class LIFO
{
    private Stack stack;

    /** Erzeugt einen leeren Stapel. */
    public LIFO()
    {
	stack = new Stack();
    }

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

    /** Liefert von einem nicht-leerer Stapel das "oberste Element", sprich
	dasjenige, das unter den im Stapel vorhandenen zuletzt eingetragen 
        wurde. Ist der Stapel leer, so wird null zurueckgeliefert.
	@return das Element */
    public Object out()
    {
	if (this.empty())
	{
	    return null;
	}
	return stack.pop();
    }

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