/***************************  VerweisKeller.java ******************************/

import AlgoTools.IO;           

/** Implementation eines Kellers mithilfe von Verweisen                       */

public class VerweisKeller implements Keller {

    private static class KellerEintrag { // innere Klasse
        Object inhalt;                   // Inhalt des KellerEintrags
        KellerEintrag next;              // Verweis auf naechsten KellerEintrag
    }

    private KellerEintrag top;           // verweist auf obersten KellerEintrag

    public VerweisKeller() {                           // legt leeren Keller an
        top = null;
    }

    public boolean empty() {                           // liefert true,
        return top == null;                            // falls Keller leer
    }

    public void push(Object x) {                       // legt Objekt x    
        KellerEintrag hilf = new KellerEintrag();      // auf den Keller
        hilf.inhalt = x;
        hilf.next   = top;
        top         = hilf;
    }

    public Object top() {                              // liefert oberstes
        if (empty()) IO.error("in top: Keller leer");  // Kellerelement
        return top.inhalt;                            
    }

    public void pop() {                                // entfernt oberstes
        if (empty()) IO.error("in pop: Keller leer");  // Kellerelement
        top = top.next;
    }
}
