ist das ein stack code?

3 Antworten

Von Experte ralphdieter bestätigt

Joa, kommt drauf an, wieviele Augen man zudrückt ^^

  • Bei einem Stack gibt "pop" normalerweise das oberste Element zurück, ist also kein void.
  • Das, was du "add" genannt hast, heißt beim Stack eigentlich "push"
  • Ein "print" gibt es normalerweise auch nicht, dafür aber ein "peek", was das oberste Element zurückgibt, ohne es vom Stapel zu löschen.
  • Ein Stack basiert normalerweise nicht auf einem Array, sondern eher auf einer LinkedList. Der Sinn vom Stack ist ja, dass man nicht wissen muss, wie viele Elemente reinkommen und dass er nur so viel Speicherplatz braucht, wie er grade Elemente enthält.
  • Normalerweise würde man einen Stack auch generisch für Objekte implementieren und nicht nur für ints.
  • Deine Implementierung hat auch noch ein paar Fehler. Man kann z.B. pop aufrufen, wenn der Stack leer ist. Deine Prüfung in der print-Funktion funktioniert nicht, wenn man einmal add, dann pop und dann print macht. Es ergibt in meinen Augen auch keinen Sinn, dass du zwei Variablen für zeiger und printer hast.

Aber so von der grundsätzlichen Funktionsweise ist das ein Stack, ja.


Tyldu  29.06.2023, 16:42

ich bin bis jetzt noch keinem stack begegnet das mit einer linked list implementiert wurde. gibt es mit sicherheit auch aber der normalfall ist es keineswegs.

0
daCypher  30.06.2023, 08:33
@Tyldu

Ich wollte grade schreiben "In Java basiert der Stack auf der LinkedList". Ich bin da aber tatsächlich einem Irrglauben aufgesessen, weil die LinkedList die typischen Stack-Befehle "push", "pop" und "peek" unterstützt und ich davon ausgegangen bin, dass die von irgendeinem Interface verlangt werden, was von der LinkedList implementiert wird, aber der Stack basiert tatsächlich auf einem Vector und der hat von der Funktionsweise eher Ähnlichkeiten mit einer ArrayList als mit einer LinkedList, von daher hast du Recht.

Und dann gibt es natürlich noch den Prozessor-Stack, der benötigt wird, um Rücksprungadressen zu speichern und rekursive Programmaufrufe zu ermöglichen. Der teilt sich den Platz mit dem Heap und kann daher so groß werden, bis Stack und Heap sich überschneiden. Spätestens dann springt normalerweise die garbage collection an und versucht, den Heap wieder zu verkleinern

1

Ein Stack hat üblicherweise keine print Funktion aber ja, die dahinter liegende Datenstruktur entspricht der eines Stacks.

Allgemein würde ich aber für solche Aufgaben immer die entsprechende Datenstruktur aus der Bibliothek verwenden.

ein richtiges stack ist eine dynamische datenstruktur, dein stack ist allerdings statisch.

heißt: normalerweise würde man das interne array vergrößern anstatt den nutzer zu beleidigen wenn es voll ist.

Woher ich das weiß:Studium / Ausbildung – Softwareentwickler, B. Sc. Informatik