53 lines
1.9 KiB
C
53 lines
1.9 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 Daten als Zeiger auf den Stack.
|
|
StackNode *push(StackNode *stack, void *data) //*stack zeigt auf oberstes Element des Stacks, *data auf beliebige Daten
|
|
{
|
|
StackNode *newNode = malloc(sizeof(StackNode)); //Reserviert Speicher für neues Element (newNode zeigt auf Speicher)
|
|
if (newNode == NULL) //falls Speicherreservierung fehlgeschlagen (Zeiger zeigt auf nichts)
|
|
return stack; //unveränderter Stack
|
|
|
|
newNode->data = data; //Übergeber Wert wird gespeichert
|
|
newNode->next = stack; //Neues Element Top des Stacks
|
|
|
|
return newNode; //Zurückgeben des neuen Elements
|
|
}
|
|
|
|
// Löscht das oberste Element des Stacks (letztes hinzugefügtes) und gibt den Speicher frei.
|
|
StackNode *pop(StackNode *stack)
|
|
{
|
|
if (stack == NULL) //Falls Stack bereits leer (keine Änderung)
|
|
return NULL;
|
|
|
|
StackNode *next = stack->next; //Speichert das nächste Element
|
|
free(stack); // Löschen des oberen Stack-Knoten (Inhalt extra freigeben)
|
|
|
|
return next;
|
|
}
|
|
|
|
// Gibt den Wert des obersten Elements zurück.
|
|
void *top(StackNode *stack) //aktueller Stackkopf als Parameter (gibt void zurück)
|
|
{
|
|
if (stack == NULL) //Falls Stack bereits leer (keine Änderung)
|
|
return NULL;
|
|
|
|
return stack->data; //Gibt Daten des oberen Stackknoten zurück (keine Änderung)
|
|
}
|
|
|
|
// Leert den Stack und gibt den gesamten Speicher frei.
|
|
void clearStack(StackNode *stack) // gibt nichts zurück
|
|
{
|
|
while (stack != NULL) // solang Elemente im Stack
|
|
{
|
|
StackNode *next = stack->next; //Speichert nächstes Element
|
|
free(stack); //Gibt den Speicher des Knotens frei (Daten nicht)
|
|
stack = next; // Wechsel zum nächsten Knoten
|
|
}
|
|
} |