generated from freudenreichan/info2Praktikum-DobleSpiel
49 lines
1.2 KiB
C
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);
|
|
}
|
|
|
|
|
|
} |