Rückgabewert und verbleibenden Stack getrennt angeben
Leere Stacks sicher behandeln
Verständlich erklärt
Ein Stack ist ein Stapel mit Zugriff an genau einem Ende, der Spitze top. LIFO bedeutet Last In, First Out: Das zuletzt hinzugefügte, noch vorhandene Element wird zuerst entfernt. push legt ein Element oben ab, pop entfernt das oberste Element und gibt es zurück. peek gibt das oberste Element zurück, verändert den Stack aber nicht. Wir schreiben einen Stack von unten nach oben; rechts steht die Spitze. Bei [A, B] ist B oben. Die angezeigte Reihenfolge ist deshalb wichtig, obwohl ein echter Stapel auch senkrecht gezeichnet werden kann.
Ein leerer Stack hat kein oberstes Element. Ein ungeschütztes pop wäre ein Unterlauf. Für die Aufgaben vereinbaren wir bei ganzzahligen Nutzdaten: Sicheres pop und peek liefern bei leerem Stack None und lassen ihn leer. Andere Schnittstellen könnten stattdessen einen Fehler melden; die jeweilige Vereinbarung entscheidet.
Eine einfache Python-Darstellung nutzt eine Liste mit append für push und pop() für das Entfernen am rechten Ende. Ein Stack kann ebenso mit verketteten Knoten umgesetzt werden. Entscheidend ist seine Zugriffsschnittstelle, nicht die konkrete Speicherform. Rückgängig-Funktionen können zuletzt ausgeführte Schritte zuerst zurücknehmen; für zuerst eingetroffene Druckaufträge wäre dieses Prinzip dagegen nicht passend.
Das zuerst eingefügte Element für die Spitze halten
Bei peek versehentlich ein Element entfernen
Rückgabewerte mit dem verbleibenden Inhalt verwechseln
Ohne Leerprüfung auf das letzte Listenelement zugreifen
Kurz zusammengefasst
push fügt oben hinzu, pop entfernt oben, peek liest nur oben. LIFO und der vereinbarte Leerfall bestimmen das Verhalten unabhängig von der Implementierung.
Abi-Bezug
Notiere nach jedem Schritt sowohl den Stackinhalt als auch gegebenenfalls den Rückgabewert. Nenne bei einer Anwendungsentscheidung das benötigte Reihenfolgeprinzip.
Jetzt selbst ausprobieren
Prüfe deine Lösung automatisch. Bei Bedarf helfen dir ein Tipp und anschließend die Musterlösung.
BPE 7J21 Punkteleicht
LIFO im Rückgängig-Verlauf
Noch nicht begonnen
Aufgabenstellung
Ein Editor speichert nacheinander die noch nicht rückgängig gemachten Aktionen A, B und C auf einem Stack. Welche Aktion nimmt ein einzelnes Rückgängig zuerst zurück?
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Übersetze Last In, First Out auf die drei Aktionen.
Welche Aktion wurde zuletzt oben auf den Stapel gelegt?
Lösung anzeigen
C liegt oben und wird zuerst entfernt. Der Stack arbeitet nach LIFO; ältere Aktionen liegen darunter.
BPE 7J21 Punkteleicht
push und pop kombinieren
Noch nicht begonnen
Aufgabenstellung
Der Stack ist anfangs leer. Es folgen push(A), push(B), pop(), push(C). Schreibe den verbleibenden Inhalt von unten nach oben, kommagetrennt.
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Notiere nach jeder Operation den gesamten Stack; die Spitze steht rechts.
Nach den ersten beiden push-Operationen liegt B oben. Nur dieses Element entfernt pop.
Lösung anzeigen
A, C. pop entfernt das zuletzt eingefügte B. C wird anschließend auf das noch vorhandene A gelegt.
BPE 7J22 Punktemittel
peek verändert nichts
Noch nicht begonnen
Aufgabenstellung
Der Stack lautet von unten nach oben [rot, blau]. Es folgen peek(), pop(), peek(). Welche drei Werte werden in dieser Reihenfolge zurückgegeben? Antworte kommagetrennt.
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Trenne bei jeder Operation Rückgabewert und Veränderung des Inhalts.
Nach peek ist der Inhalt gleich geblieben, nach pop fehlt die bisherige Spitze.
Lösung anzeigen
blau, blau, rot. Das erste peek liest blau ohne Entfernen; pop liefert und entfernt blau; danach liegt rot oben.
BPE 7J22 Punktemittel
Leeren Stack sicher lesen
Noch nicht begonnen
Aufgabenstellung
Für diesen Stack mit ganzzahligen Daten gilt: peek() liefert die Spitze, bei leerem Stack aber den Python-Wert für „kein Element“. Der Stack ist []. Welcher Wert wird zurückgegeben?
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Es ist kein oberstes Element vorhanden; es wird auch keines neu erzeugt.
Nutze den vereinbarten Python-Wert für eine fehlende Angabe, nicht eine beliebige Zahl.
Lösung anzeigen
None. Diese Aufgabe vereinbart ausdrücklich einen sicheren Leerfall. Die Zahl 0 wäre selbst ein möglicher gespeicherter Wert und würde die Fälle nicht unterscheiden.
BPE 7J22 Punktemittel
Sicheres pop implementieren
Noch nicht begonnen
Aufgabenstellung
Implementiere sicher_pop(stapel) für eine Python-Liste mit ganzen Zahlen. Rechts liegt die Spitze. Entferne das oberste Element und gib es zurück. Ist die Liste leer, gib None zurück und lasse sie leer. Verändere die übergebene Liste selbst, nicht nur eine Kopie.
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Prüfe zuerst, ob überhaupt ein Element vorhanden ist.
Ohne Index entfernt pop() das rechte Listenelement und gibt genau dieses Element zurück.
Lösung anzeigen
def sicher_pop(stapel):
if not stapel:
return None
return stapel.pop()
BPE 7J22 Punktemittel
Unterlauf nach einem Entfernen
Noch nicht begonnen
Aufgabenstellung
Ein leerer Zahlenstack verwendet sichere Operationen: pop und peek liefern bei Leere None. Es folgen push(4), pop(), pop(), push(7), peek(). Gib die Rückgaben der beiden pop-Aufrufe und des peek-Aufrufs kommagetrennt an.
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
push hat hier keine gefragte Rückgabe. Schreibe nur Ergebnisse der drei Lese-/Entnahmeoperationen auf.
Der zweite pop-Aufruf findet einen leeren Stack vor und verwendet die vereinbarte Leerfallregel.
Lösung anzeigen
4, None, 7. Nach dem ersten pop ist der Stack leer. Das zweite pop bleibt deshalb ohne Entfernung; nach push(7) liest peek die 7.
BPE 7J23 Punkteanspruchsvoll
Schnittstelle statt Speicherform
Noch nicht begonnen
Aufgabenstellung
Welche Aussage über einen Stack ist richtig?
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Unterscheide die erlaubten Operationen von dem Material, mit dem sie umgesetzt werden.
Einfügen und Entfernen an derselben Spitze führt zu LIFO.
Lösung anzeigen
Der abstrakte Datentyp legt das beobachtbare Verhalten fest. Die Speicherform allein bestimmt nicht, ob LIFO oder FIFO verwendet wird.