public class ArrayStackSkeleton {
    /**
     * Hier werden die Stack-Einträge gespeichert.
     */
    private int[] data;

    /**
     * Das nächste zu schreibende Element (= Anzahl der Elemente auf dem Stack)
     */
    private int topOfStack;

    /**
     * Legt einen Stack mit der Anfangskapazität <code>initialCapacity</code>
     * an. Die Kapazität wirkt sich nicht auf das beobachtbare Verhalten aus
     * (sprich: sie wird bei Bedarf erweitert).
     */
    public ArrayStackSkeleton(int initialCapacity) {
        // TODO
    }

    /**
     * Lege einen leeren Stack an.
     */
    public ArrayStackSkeleton() {
        // TODO
    }

    /**
     * Lege einen neuen Stack an, belege ihn mit den Elementen
     * <code>elements</code>.
     */
    public ArrayStackSkeleton(int[] elements) {
        // TODO
    }

    /**
     * Copy constructor: Erzeuge eine neue Instanz als echte Kopie von
     * <code>other</code>.
     */
    public ArrayStackSkeleton(ArrayStackSkeleton other) {
        // TODO
    }

    /**
     * Stelle einen neuen Wert auf den Stack, erweitere gegebenenfalls die
     * Kapazität.
     */
    public void push(int value) {
        // TODO
    }

    /**
     * Entferne den obersten Wert vom Stack und gib ihn zurück.
     */
    public int pop() {
        // TODO
    }

    /**
     * Lies den obersten Wert vom Stack aus.
     */
    public int peek() {
        // TODO
    }

    /**
     * Gib den momentanen Stackzustand als String zurück.
     */
    public String toString() {
        // TODO
    }

    public static void main(String[] args) {
        ArrayStackSkeleton stack = new ArrayStackSkeleton();
        System.out.println(stack);
        stack.push(5);
        System.out.println(stack);
        stack.push(3);
        System.out.println(stack);
        System.out.println("-->" + stack.pop());
        System.out.println(stack);
        System.out.println("-->" + stack.peek());
        System.out.println(stack);
    }
}
