From c8edc1a619292f404fa77592bbc0666dd9a92f85 Mon Sep 17 00:00:00 2001 From: Timo Hertel Date: Tue, 9 Dec 2025 19:40:23 +0000 Subject: [PATCH] Tippfehler in Stack.md --- I2_Dobble/Stack.md | 72 ++++++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/I2_Dobble/Stack.md b/I2_Dobble/Stack.md index d11811c..dd3173f 100644 --- a/I2_Dobble/Stack.md +++ b/I2_Dobble/Stack.md @@ -1,42 +1,46 @@ -# stack.h -*Aufgabe: passender Dateityp als struct anlegen* - +# stack.h +*Aufgabe: passender Datentyp für ein Listenelement als struct anlegen* + ``` c typedef struct Node { - void *data; - struct Node* next; +void *data; +struct Node* next; } StackNode; ``` - -* typedef nicht zwingend notwendig, aber erleich­tert später den Aufruf: StackNode vs struct stackNode -* Zeiger data für Speicher -* struct-Node-Zeiger, der auf in der Liste folgendes Node zeigen wird (oder NULL wenn nicht vorhanden) -* für jedes struct dieses Typs, dass wir später in den Stack.c Funktionen erstellen muss Speicher manuell zugewiesen werden! + +* **typedef** nicht zwingend notwendig, aber erleich­tert später den Aufruf: `StackNode` vs `struct stackNode` +* **Zeiger data** zeigt auf in Liste gespeicherten Wert +* **Zeiger auf Node struct**, der auf das folgende Node zeiget (oder NULL ist, wenn kein folgendes vorhanden) +* für jedes struct dieses Typs, dass wir später in den Stack.c Funktionen erstellen muss Speicher manuell zugewiesen werden! -# stack.c +# stack.c -### push: -*neues Element oben auf die Liste legen* -* Sicherheits-Überprüfung: falls übergebener Pointer für Daten kein Ziel (= NULL) hat ⇒ alle Schritte werden übersprungen, Stack- Pointer wird unverändert zurück gegeben -* Listerelement erstellen: Standard Ablauf für Structs: erst ein Pointer, dann mit malloc an diesem Ort Speicher in der richtigen Größe reservieren (hier Größe eines Listenelements), dann kann Speicher genutzt werden -* data wird gespeichert -* next passend setzen, entweder bisher oberstes Element oder keines, wenn Liste leer war -* stach-Pointer auf neues, oberstes Listetenelement zeigen lassen - -### pop: -*oberstes Element von Liste löschen* -* Sicherheits-Überprüfung: wenn Stack schon leer wird nichts entfernt (Stack = NULL bedeutet kein erstes Element existiert) -* zum Löschen. wird speicher am Ort des stach-Zeigers freigegeben - damit ist das oberste Element weg -* zuletzt wird der Stack-Zeiger neu gesetzt f neues oberstes Listerelement - -### top: -*gibt Daten-Zeiger des obersten Elements zurück* -* Sicherheits-Überprüfung: existiert ein oberstes Element überhaupt? sonst würde man beim Versuch data auszulesen auf nicht oder anders zugewiesenen Speicher zugreifen! -* zur normalen Ausgabe wird einfach der Zeigerwert der data-Variable des oberster Stackelements zurückgegeben - -### clear stack: -*die Liste leeren inklusive Speicherfreigabe* -* Funktionsprinzip: so lange das oberste Element mit pop-funktion entfernen, bis die Liste leer ist -* da pop erkennt, wenn Liste leer und dann den Stack-Pointer NULL setzt dient das als Schleifenvariable +### push: +*neues Element oben auf die Liste legen* +* Sicherheits-Überprüfung: falls übergebener Pointer für Daten kein Ziel hat (data = NULL) => alle unten beschriebenen Schritte werden übersprungen, Stack- Pointer wird unverändert zurück gegeben +* Listenelement erstellen: (Standard Ablauf für Structs) + * Pointer initialisieren + * mit malloc an diesem Ort im Speicher in der richtigen Größe reservieren (hier Größe eines Listenelements) + * Speicher kann genutzt werden +* data wird gespeichert +* next passend setzen, entweder zuvor oberstes Element oder keines, wenn Liste leer war +* stack-Pointer auf neues, oberstes Listetenelement zeigen lassen + +### pop: +*oberstes Element von Liste löschen* +* Sicherheits-Überprüfung: wenn Stack schon leer ist wird nichts entfernt (Stack = NULL bedeutet kein erstes Element existiert) - sonst würde nicht reservierter Speicher freigegeben +* müssen alle Zeiger auf das Element ändern und den Speicher Freigeben - damit ist alles entfernt: +* zum Löschen wird Speicher am Ort des stack-Zeigers freigegeben - damit ist das oberste Element weg +* zuletzt wird der Stack-Zeiger neu gesetzt, um auch alle Pointer, die noch auf das gelöschte Element zeigen zu aktuallisieren + +### top: +*gibt Daten-Zeiger des obersten Elements zurück* +* Sicherheits-Überprüfung: existiert ein oberstes Element überhaupt? sonst würde man beim Versuch data auszulesen auf überhaupt nicht bzw anders zugewiesenen Speicher zugreifen! +* zur normalen Ausgabe wird einfach der Zeigerwert der data-Variable des oberster Stackelements zurückgegeben + +### clear stack: +*die Liste leeren inklusive Speicherfreigabe* +* Funktionsprinzip: so lange das oberste Element mit pop-funktion entfernen, bis die Liste leer ist +* da pop erkennt, wenn Liste leer und dann den Stack-Pointer NULL setzt dient das als Schleifenvariable