From 94e489cfae5dfcf2cae2baadc91337ca6bfefe78 Mon Sep 17 00:00:00 2001 From: Lukas Weber Date: Thu, 27 Nov 2025 17:10:02 +0100 Subject: [PATCH] Finished first draw of stack, next step: writing tests --- stack.c | 34 +++++++++++++++++++++++++++++++++- stack.h | 5 +++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/stack.c b/stack.c index e3a90d4..e4d02d2 100644 --- a/stack.c +++ b/stack.c @@ -10,6 +10,18 @@ // Pushes data as pointer onto the stack. StackNode *push(StackNode *stack, void *data) { + if(!(stack)) { // check if stack is empty + stack = malloc(sizeof(StackNode)); + stack->stackData = data; + stack->below = NULL; + return stack; + } + + StackNode* newStack = malloc(sizeof(StackNode)); + newStack->below = stack; + newStack->stackData = data; + stack = newStack; + return stack; } @@ -17,17 +29,37 @@ StackNode *push(StackNode *stack, void *data) // freed by caller.) StackNode *pop(StackNode *stack) { - + if(stack) { + StackNode* temp = stack; + stack = stack->below; + free(temp->data); + temp->stackData = NULL; + free(temp); + temp = NULL; + return stack; + } else { + return NULL; + } } // Returns the data of the top element. void *top(StackNode *stack) { + if(stack) + return stack->stackData; + else + return NULL; } // Clears stack and releases all memory. void clearStack(StackNode *stack) { + if(stack) { + do { + stack = pop(stack); + } while (stack->below); + pop(stack); + } } \ No newline at end of file diff --git a/stack.h b/stack.h index f7d542d..d15a367 100644 --- a/stack.h +++ b/stack.h @@ -9,6 +9,11 @@ The latest element is taken from the stack. */ //TODO: passenden Datentyp als struct anlegen +typedef struct StackNode { + StackNode* below; + void* stackData; +} StackNode; + // Pushes data as pointer onto the stack. StackNode *push(StackNode *stack, void *data);