Finished first draw of stack, next step: writing tests

This commit is contained in:
Lukas Weber 2025-11-27 17:10:02 +01:00
parent 6671a3aacc
commit 94e489cfae
2 changed files with 38 additions and 1 deletions

34
stack.c
View File

@ -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);
}
}

View File

@ -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);