Info2Doble/stack.c
silvana884 b5e5a8052f Test
2025-12-03 14:20:04 +01:00

58 lines
1.4 KiB
C

#include <stdlib.h>
#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)
{
if(stack && data){
StackNode *t = (StackNode *)malloc(sizeof(StackNode));
if(!t)
{
return NULL; //Speicherfehler
}
t->next = stack;
t->data = data;
return t; //Gibt den ersten StackNode des Stacks zurueck
}
return NULL;
}
// 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)
{
StackNode *t = stack->next; //Naechstes Element im Stack wird erstes Element
free(stack);
return t;
}
}
// Returns the data of the top element.
void *top(StackNode *stack)
{
if(stack)
{
return stack->data;
}
return NULL;
}
// Clears stack and releases all memory.
void clearStack(StackNode *stack)
{
while(stack)
{
StackNode *tmp = stack; //merkt sich den momentanen obersten KNoten
stack = stack->prev; //setzt den obersten Knoten auf den zweiten im Stack
free(tmp->data);
free(tmp);
}
}