Wozu braucht man Stapel?

2 Antworten

Ein Stapel ist ein LIFO (last in, first out) und eine Schlange ist ein FIFO (first in, first out).

Einen Stapel brauchst Du beispielsweise, um zu prüfen, ob geklammerte Ausdrücke korrekt sind.

Beispielsweise: [()(())((([])[()()](()(()))))]

(Und ja, der ist korrekt.)

Eine List kann "mehr", als ein Stapel. Eine doppelt verkettete Liste beispielsweise kann einen Stapel oder eine Schlange implementieren - und noch einiges weiteres.


Iknowstuff 
Beitragsersteller
 05.01.2024, 16:00

Wieso gibt es dann Schlangen und Stapel wenn man all das auch mit Listen kann? Das macht es doch nur unnötig kompliziert.

1
NoHumanBeing  05.01.2024, 16:02
@Iknowstuff
  • Weil man die Datenstruktur ggf. optimieren kann, wenn man weniger Operationen unterstützen muss.
  • Weil man den Entwickler in seinen Möglichkeiten "einschränken" kann. Deswegen setzt Du ja beispielsweise auch Methoden und Attribute "private". Wenn Du also sicher weißt, dass Du immer nur an der "oberste" Element dran musst, nimmst Du einen Stack. Damit verhinderst Du, dass jemand später "versehentlich" den Code ändert und auch auf "innere" Elemente zugreift. Ansonsten kannst Du das nur per Konvention machen, aber wenn die Typprüfung es bereits sicher stellt, ist das natürlich expliziter.
1
Iknowstuff 
Beitragsersteller
 05.01.2024, 16:06
@NoHumanBeing

Was bringt es den Entwickler einzuschränken? Dann hat man als Programmierer doch gar nicht die Möglichkeit, seine Kreativität frei zu entfalten. Was meinst du mit "Weil man die Datenstruktur ggf. optimieren kann, wenn man weniger Operationen unterstützen muss." ? Da ist doch nix optimiert. Meiner Meinung nach sind Listen viel besser und Stapel sind unnötig.

1
NoHumanBeing  06.01.2024, 20:26
@Iknowstuff
Was bringt es den Entwickler einzuschränken? Dann hat man als Programmierer doch gar nicht die Möglichkeit, seine Kreativität frei zu entfalten.

Doch, Du hast ja die Wahl, den geeigneten Datentyp zu verwenden.

Eine Liste kann ja auch verschieden implementiert werden, beispielsweise durch das, was in Java eine ArrayList oder Vector genannt wird, oder durch einfach oder doppelt verkettete Listen, etc.

Die Datenstrukturen haben Unterschiede beim wahlfreien oder sequentiellen Zugriff auf Elemente, beim Einfügen oder entfernen von Elementen am Ende der Liste, am Anfang der Liste, oder "in der Mitte".

0

Stapel oder Stacks kenne ich noch aus alten DOS Zeiten bei .bat Dateien.

Stapel waren dort grundlegend für eine nicht abänderbare Routinenabfolge an der Basis zum seriellen Laden eines Programmes und seiner einzelnen Dateien, Bibliotheken und externer Treiber erforderlich, damit es überhaupt funktionieren kann.

Änderungen sind in den Grundroutinen eines zu ladenden Programmes nicht zulässig (gewesen), da es in seiner Befehlsablaufstruktur bis zu seiner Bereitschaft nun mal ganz bestimmte Daten & Infos in einer zuvor strikt vom Programmierer festgelegten Reihenfolge benötigte.