#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) { StackNode *newNode = (StackNode *)malloc(sizeof(StackNode)); if(!newNode) { return NULL; } newNode->data = data; newNode->next = 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) { if(!stack) { return NULL; } StackNode *topNode = stack; stack = stack->next; free(topNode); return stack; } // Returns the data of the top element. void *top(StackNode *stack) { if(!stack){ return NULL; } return stack->data; } // Clears stack and releases all memory. StackNode *clearStack(StackNode *stack) { StackNode *current = stack; StackNode *next_node; while(current){ next_node = current->next; free(current); current = next_node; } return NULL; }