1. Stack

 

 

1.1 Bedienungshinweise

Das StackApplet wird über zwei Masken bedient. Direkt nach dem Start des Applets ist die Initialisierungsmaske sichtbar. Dort wird im Textfeld die Stacktiefe festgelegt bzw. über den "reset" Button, der Stack entleert. In der Eingabemaske wird über den "push" Button, das im Textfeld spezifizierte Element, auf den Stack gelegt. Durch Klick auf "pop" wird das oberste Element vom Stack entnommen. Zwischen beiden Masken wird über die Buttons "<<" oder ">>" gewechselt.

 

1.2 Funktionsweise

Ein Stack - auch Stapel oder Keller genannt - funktioniert nach dem LIFO-Prinzip. Das Element, welches zuletzt auf den Stack gelegt wurde, wird zuerst wieder entnommen. Die Operation für das Speichern eines Elementes auf dem Stack heißt "push". Falls als darunterliegende Datenstruktur eine Liste gewählt wurde, so hängt die Push Operation das Element einfach vor die bestehende Liste. Weitaus üblicher ist jedoch das Array als Stackspeicher. Hierbei wird die Einführung eines Zeigers auf die aktuelle Stackspitze notwendig, den Stackpointer. Dieser Stackpointer wird bei jedem "push" um 1 Feld erhöht oder erniedrigt - je nachdem, ob der Stack nach oben oder nach unten wächst. Ok, ich habe auch noch keine "echten" Stapel gesehen, welcher nach unten wuchs, aber in der Informatik ist das durchaus üblich. So kombinieren z.B. viele Compiler einen nach oben wachsenden Heap mit einem vom oberen Ende, entgegengesetzt wachsenden Stack. Ein optimaler Kompromiß bezüglich Speicherausnutzung. Die zweite Operation "pop" macht genau das Gegenteil von "push". Sie holt das neueste Element vom Stack und löscht es dort gleichzeitig. Natürlich muß auch hier ein eventuell vorhandener Stackpointer aktualisiert werden. Wie bei der Queue, gibt es auch beim Stack zwei bemerkenswerte Zustände. Entweder der Stack ist leer und wir versuchen ein Element zu entnehmen (stack empty). Oder der Stack ist voll und wir versuchen ein Element auf den Stack zu legen (stack overflow).


© Sven Bürgel, letzte Änderung: 29.01.98