diff --git a/stack.c b/stack.c index e3a90d4..be0f396 100644 --- a/stack.c +++ b/stack.c @@ -10,24 +10,44 @@ // Pushes data as pointer onto the stack. StackNode *push(StackNode *stack, void *data) { + StackNode* stacknew = malloc(sizeof(StackNode)); + stacknew->value = data; + stacknew->prev = stack; + + return stacknew; } // 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) { + StackNode *ptr = stack->prev; + free(stack); + return ptr; } // Returns the data of the top element. void *top(StackNode *stack) { + return stack->value; + } // Clears stack and releases all memory. void clearStack(StackNode *stack) { + StackNode *ptr = stack; + while (ptr != NULL) { + + StackNode *prev = ptr->prev; + + free(ptr->value); + free(ptr); + + ptr = prev; + } } \ No newline at end of file diff --git a/stack.h b/stack.h index f7d542d..3f8746e 100644 --- a/stack.h +++ b/stack.h @@ -8,6 +8,10 @@ The latest element is taken from the stack. */ #include //TODO: passenden Datentyp als struct anlegen +typedef struct { + void* value; + StackNode* prev; +} StackNode; // Pushes data as pointer onto the stack. StackNode *push(StackNode *stack, void *data);