diff --git a/doble.exe b/doble.exe index 0443f08..77fc487 100644 Binary files a/doble.exe and b/doble.exe differ diff --git a/highscores.txt b/highscores.txt index 892e57a..42d441c 100644 --- a/highscores.txt +++ b/highscores.txt @@ -1,3 +1,4 @@ Benedikt;4990 player1;3999 +Benedikt;2994 Beneidkt;2990 diff --git a/test_stack.c b/test_stack.c index 60fabd8..e6726b3 100644 --- a/test_stack.c +++ b/test_stack.c @@ -3,68 +3,108 @@ #include #include "stack.h" +/* + * Gibt den gesamten Stack von oben (Top) nach unten aus. + * Erwartet einen Zeiger auf den obersten StackNode. + * Die Funktion verändert den Stack nicht dauerhaft, + * da der lokale Zeiger 'stack' nur kopiert wird. + */ void inspectStack(StackNode *stack) { if (stack != NULL) { + //Erstes Element separat ausgeben, um kein führendes Leerzeichen zu haben printf("Der Stack enthält die folgenden Elemente: %d", *(int*)stack->value); + + // Über die verkettete Liste iterieren while (stack->next != NULL) { printf(" %d", *(int*)stack->next->value); - stack = stack->next; + stack = stack->next; // zum nächsten Element wechseln } putchar('\n'); } else { + // Leerer Stack (NULL-Zeiger) printf("Der Stack ist leer\n"); } } int main() { + // Zeiger auf den obersten Stack-Knoten StackNode *stack; - stack = NULL; // initialisierung mit NULL -> leere Liste + + // Initialisierung: NULL entspricht einem leeren Stack + stack = NULL; printf("...ein Element wird eingefügt...\n"); + + /* + * Achtung: Es wird die Adresse von 'toBeRemoved' gespeichert. + * Das ist hier zulässig, da die Variable bis zum Ende von main + * gültig bleibt. In allgemeinem Code sollte man stattdessen + * dynamisch Speicher reservieren oder den Wert kopieren. + */ int toBeRemoved = 42; stack = push(stack, &toBeRemoved); inspectStack(stack); printf("...das Element wird wieder entfernt...\n"); + + // pop gibt den neuen Stack-Top zurück stack = pop(stack); inspectStack(stack); printf("...pop auf leeren Stack...\n"); + + // pop auf leerem Stack sollte intern sicher behandelt werden stack = pop(stack); inspectStack(stack); putchar('\n'); + // Statisches Array mit Beispieldaten int data[5] = {1, 2, 3, 4, 5}; - // alle 5 werte der reihe nach auf den Satck legen - 1 unten ... 5 oben + /* + * Alle 5 Werte der Reihe nach auf den Stack legen: + * 1 liegt unten, 5 liegt oben (LIFO-Prinzip). + */ for (int i = 0; i < 5; i++) { stack = push(stack, &data[i]); } - - //alle Elemente mit Test-Funktion ausgeben + /* Gesamten Stack ausgeben */ inspectStack(stack); - // Elemente stück für Stück ausgeben und entfernen + /* + * Elemente einzeln auslesen (top) und anschließend entfernen (pop). + * Erwartete Ausgabe-Reihenfolge: 5, 4, 3, 2, 1 + */ printf("1. Element war: %d\n", *(int*)top(stack)); stack = pop(stack); + printf("2. Element war: %d\n", *(int*)top(stack)); stack = pop(stack); + printf("3. Element war: %d\n", *(int*)top(stack)); stack = pop(stack); + printf("4. Element war: %d\n", *(int*)top(stack)); stack = pop(stack); + printf("5. Element war: %d\n", *(int*)top(stack)); + + /* + * Hinweis: Nach dem letzten top() sollte eigentlich noch + * ein pop() erfolgen, um den Stack vollständig zu leeren + * und ggf. dynamisch allokierten Speicher freizugeben. + */ } /*