/** Stack implementerer en stak af (ikke-null objekter)
 *
 * Denne klasse er fix og færdig. Du kan uden videre bruge den.  */
public class Stack {
    
    /** Stack konstruerer den tomme stak */
    public Stack() { s = null; };
    
    /** push tilføjer et Object til stakken
     * @param elem - det Object som skal lægges på stakken
     */
    public void push(Object elem) { 
	if (elem!=null) s = new StackElement(elem,s);
    }
    
    /** pop fjerner et element fra stakken 
     * @return elem - det øverste Object på stakken,
     *                hvis der er en, ellers null
     */
    public Object pop() {
	if (s==null) return null;
	Object elem = s.elem;
	s = s.next;
	return elem;
    }
    
    public boolean empty() { return (s==null); }
    
    /** clear tømmer stakken */
    public void clear() { s=null; }
    
    private StackElement s;
    
    private class StackElement {
	Object elem;
	StackElement next;
	
	StackElement(Object elem, StackElement next) {
	    this.elem = elem;
	    this.next = next;
	}
    }
}
