DobleSpiel/stack.c
2025-12-11 13:50:52 +01:00

49 lines
1.2 KiB
C

#include <stdlib.h>
#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 = 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);
}
}