IntStack.java
import java.io.*;
public class IntStack {
// Stack mit automatischem Wachstum über Verdopplung
private int[] a; // Liste der Elemente
private int last; // Zahl der Elemente
public IntStack() {
// erzeugt einen Stack von Standardgröße
this(100);
}
public IntStack(int size) {
// erzeugt einen Stack der Größe size
a = new int[size];
last = 0;
}
public void push(int d) {
// legt d auf dem Stack ab
// ggf. internen Speicher vergrößern
if (last == a.length) {
int[] aNeu = new int[2*a.length];
for (int i = 0; i < a.length; i++) {
aNeu[i] = a[i];
}
a = aNeu; // a ist dann reif für den Garbage Collector
}
a[last] = d;
last++;
}
public int pop() {
// holt oberstes Element vom Stack
last--;
return a[last];
}
public boolean empty() {
// true, wenn kein Element implements Stack ist
return (last == 0);
}
public double peek() {
// gibt oberstes Element aus, ohne es zu entfernen
return a[last - 1];
}
public static void main(String[] args) throws IOException {
// kleines Testsprogramm
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
// Größe des Stackbuffers vom Benutzer abfragen
String s; // String für eingegebene Zeile
System.out.println("Anfangsgröße des Stacks eingeben:");
s = in.readLine();
int size = Integer.parseInt(s);
IntStack meinStack = new IntStack(size);
// Stack füllen
System.out.println("Positive Zahlen eingeben (beenden durch -1):");
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());
}
}
}