#include #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; }