IntStack.java

import java.io.*;

public class IntStack {
  // Stack mit automatischem Wachstum über verkettete Liste
  
  private Liste liste;
  
  public IntStack() {
    // erzeugt einen Stack
    liste = new Liste();
  }
  
  public void push(int d) {
    // legt d auf dem Stack ab
    liste.vornEinfügen(new ListenKnoten(d));
  }
  
  public int pop() {
    // holt oberstes Element vom Stack
    int ergebnis = liste.holeErstesElement().holeDaten();
    liste.entferneErstesElement();
    return ergebnis;
  }
  
  public boolean empty() {
    // true, wenn kein Element im Stack ist
    return (liste.holeErstesElement() == null);
  }
  
  public double peek() {
    // gibt oberstes Element aus, ohne es zu entfernen
    int ergebnis = liste.holeErstesElement().holeDaten();
    return ergebnis;
  }
  
  public static void main(String[] args) throws IOException {
    // kleines Testsprogramm
    
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        
    IntStack meinStack = new IntStack();
    
    // Stack füllen
    System.out.println("Positive Zahlen eingeben (beenden durch -1):");
    String s;
    int neuerWert;
    do {
      s = in.readLine();
      neuerWert = Integer.parseInt(s);
      meinStack.push(neuerWert);
    } while (neuerWert >= 0);
    
    // letzten Wert wieder herausnehmen, war ja Ende-Zeichen
    meinStack.pop();
    
    // Ausgabe des Stacks
    System.out.println("Werte im Stack:");
    while (! meinStack.empty()) {
      System.out.println(meinStack.pop());
    }
  }
}