60 lines
1.5 KiB
C

#include <stdlib.h>
#include "stack.h"
//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. */
// Pushes data as pointer onto the stack.
StackNode* push(StackNode* stack, void* data)
{
//pointer onto new struct
StackNode* newNode = malloc(sizeof(StackNode));
newNode->data = data;
//*stack := first node of the stack; is now the second to first node
newNode->nextNode = stack;
return newNode;
}
// 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)
{
//getting the second to first node
StackNode* tmp = stack->nextNode;
// data should be freed by the caller
// free(stack->data);
// stack->data = NULL;
free(stack);
stack = NULL;
return tmp;
}
// Returns the data of the top element.
void* top(StackNode* stack)
{
//No stack --> No data-pointer
if (stack == NULL) return NULL;
return stack->data;
}
// Clears stack and releases all memory.
void clearStack(StackNode* stack)
{
if (stack == NULL) return;
if (stack->nextNode != NULL) clearStack(stack->nextNode);
// date should be freed by the caller.
// free(stack->data);
// stack->data = NULL;
free(stack);
// technically not needed (dangling pointer)
stack = NULL;
}