From e7423f0a202e7df87ecc30f7d0a60eb9c669db6d Mon Sep 17 00:00:00 2001 From: Max-R Date: Fri, 5 Dec 2025 10:26:10 +0100 Subject: [PATCH] stack.c --- stack.c | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/stack.c b/stack.c index e3a90d4..a49bdd9 100644 --- a/stack.c +++ b/stack.c @@ -1,33 +1,58 @@ #include #include "stack.h" -//TODO: grundlegende Stackfunktionen implementieren: +// TODO: grundlegende Stackfunktionen implementieren: /* * `push`: legt ein Element oben auf den Stack, - * `pop`: entfernt das oberste Element, - * `top`: liefert das oberste Element zurück, - * `clearStack`: gibt den gesamten Speicher frei. */ + * `pop`: entfernt das oberste Element, + * `top`: liefert das oberste Element zurück, + * `clearStack`: gibt den gesamten Speicher frei. */ // Pushes data as pointer onto the stack. StackNode *push(StackNode *stack, void *data) { + StackNode *newNode = createNode(data); // Speicher für neuen Knoten + // reservieren + if (newNode == NULL) + { // wenn Speicher nicht reserviert werden konnte, wird + // stack unverändert zurückgegeben + return stack; + } + + newNode->next = stack; // pointer verschieben + + return newNode; // Zeiger auf neuen Speicherbereich zurückgeben } // Deletes the top element of the stack (latest added element) and releases its memory. (Pointer to data has to be // freed by caller.) StackNode *pop(StackNode *stack) { + if (stack == NULL) + return NULL; + StackNode *nextNode = stack->next; + + free(stack); + + stack = NULL; + + return nextNode; } // Returns the data of the top element. -void *top(StackNode *stack) -{ - -} +void *top(StackNode *stack) { return stack != NULL ? stack->data : NULL; } // Clears stack and releases all memory. void clearStack(StackNode *stack) { + while (stack != NULL) + { + StackNode *next = stack->next; + free(stack); + stack = next; + } + + return NULL; } \ No newline at end of file