#include #include "stack.h" // Legt ein Element auf den Stack. // Erstellt einen neuen Knoten, setzt dessen next-Zeiger auf den aktuellen Stack // und gibt den neuen Knoten als neuen Stack-Kopf zurück. StackNode *push(StackNode *stack, void *data) { StackNode *newNode = (StackNode *)malloc(sizeof(StackNode)); if (newNode == NULL) { // Bei Speicherfehler geben wir den alten Stack unverändert zurück // (oder man könnte das Programm beenden) return stack; } newNode->data = data; newNode->next = stack; return newNode; } // Entfernt das oberste Element. // Gibt den Zeiger auf das nächste Element zurück (das nun oben liegt). StackNode *pop(StackNode *stack) { if (stack == NULL) { return NULL; } StackNode *nextNodes = stack->next; free(stack); // Nur den Knoten freigeben, nicht die Daten (data)! return nextNodes; } // Gibt die Daten des obersten Elements zurück. void *top(StackNode *stack) { if (stack == NULL) { return NULL; } return stack->data; } // Leert den Stack komplett. void clearStack(StackNode *stack) { while (stack != NULL) { stack = pop(stack); } }