This commit is contained in:
Benedikt Sopp 2025-12-16 10:54:14 +01:00
parent dff4c782db
commit 6c6a28fbb2
3 changed files with 47 additions and 6 deletions

BIN
doble.exe

Binary file not shown.

View File

@ -1,3 +1,4 @@
Benedikt;4990 Benedikt;4990
player1;3999 player1;3999
Benedikt;2994
Beneidkt;2990 Beneidkt;2990

View File

@ -3,68 +3,108 @@
#include <stdlib.h> #include <stdlib.h>
#include "stack.h" #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) void inspectStack(StackNode *stack)
{ {
if (stack != NULL) 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); printf("Der Stack enthält die folgenden Elemente: %d", *(int*)stack->value);
// Über die verkettete Liste iterieren
while (stack->next != NULL) while (stack->next != NULL)
{ {
printf(" %d", *(int*)stack->next->value); printf(" %d", *(int*)stack->next->value);
stack = stack->next; stack = stack->next; // zum nächsten Element wechseln
} }
putchar('\n'); putchar('\n');
} }
else else
{ {
// Leerer Stack (NULL-Zeiger)
printf("Der Stack ist leer\n"); printf("Der Stack ist leer\n");
} }
} }
int main() int main()
{ {
// Zeiger auf den obersten Stack-Knoten
StackNode *stack; StackNode *stack;
stack = NULL; // initialisierung mit NULL -> leere Liste
// Initialisierung: NULL entspricht einem leeren Stack
stack = NULL;
printf("...ein Element wird eingefügt...\n"); 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; int toBeRemoved = 42;
stack = push(stack, &toBeRemoved); stack = push(stack, &toBeRemoved);
inspectStack(stack); inspectStack(stack);
printf("...das Element wird wieder entfernt...\n"); printf("...das Element wird wieder entfernt...\n");
// pop gibt den neuen Stack-Top zurück
stack = pop(stack); stack = pop(stack);
inspectStack(stack); inspectStack(stack);
printf("...pop auf leeren Stack...\n"); printf("...pop auf leeren Stack...\n");
// pop auf leerem Stack sollte intern sicher behandelt werden
stack = pop(stack); stack = pop(stack);
inspectStack(stack); inspectStack(stack);
putchar('\n'); putchar('\n');
// Statisches Array mit Beispieldaten
int data[5] = {1, 2, 3, 4, 5}; 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++) for (int i = 0; i < 5; i++)
{ {
stack = push(stack, &data[i]); stack = push(stack, &data[i]);
} }
/* Gesamten Stack ausgeben */
//alle Elemente mit Test-Funktion ausgeben
inspectStack(stack); 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)); printf("1. Element war: %d\n", *(int*)top(stack));
stack = pop(stack); stack = pop(stack);
printf("2. Element war: %d\n", *(int*)top(stack)); printf("2. Element war: %d\n", *(int*)top(stack));
stack = pop(stack); stack = pop(stack);
printf("3. Element war: %d\n", *(int*)top(stack)); printf("3. Element war: %d\n", *(int*)top(stack));
stack = pop(stack); stack = pop(stack);
printf("4. Element war: %d\n", *(int*)top(stack)); printf("4. Element war: %d\n", *(int*)top(stack));
stack = pop(stack); stack = pop(stack);
printf("5. Element war: %d\n", *(int*)top(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.
*/
} }
/* /*