diff --git a/stack.c b/stack.c index 00649c5..d9e4013 100644 --- a/stack.c +++ b/stack.c @@ -10,7 +10,11 @@ // Pushes data as pointer onto the stack. StackNode *push(StackNode *stack, void *data) { - if(stack && data){ + if (!data) + { + return stack; //Nichts pushen + } + //if(stack && data){ StackNode *t = (StackNode *)malloc(sizeof(StackNode)); if(!t) { @@ -19,7 +23,7 @@ StackNode *push(StackNode *stack, void *data) t->next = stack; t->data = data; return t; //Gibt den ersten StackNode des Stacks zurueck - } + //} return NULL; } @@ -33,6 +37,10 @@ StackNode *pop(StackNode *stack) free(stack); return t; } + else + { + return NULL; + } } // Returns the data of the top element. @@ -50,8 +58,8 @@ void clearStack(StackNode *stack) { while(stack) { - StackNode *tmp = stack; //merkt sich den momentanen obersten KNoten - stack = stack->next; //setzt den obersten Knoten auf den zweiten im Stack + StackNode *tmp = stack; //merkt sich den momentanen obersten Knoten + stack = stack->next; //setzt den obersten Knoten auf den Zweiten im Stack free(tmp->data); free(tmp); } diff --git a/stack.h b/stack.h index 0f6807e..6289231 100644 --- a/stack.h +++ b/stack.h @@ -8,8 +8,8 @@ The latest element is taken from the stack. */ #include //TODO: passenden Datentyp als struct anlegen -typedef{ - int* data; +typedef struct StackNode { + void* data; struct StackNode *next; }StackNode; diff --git a/test_stack.c b/test_stack.c new file mode 100644 index 0000000..0243351 --- /dev/null +++ b/test_stack.c @@ -0,0 +1,61 @@ +#include +#include "stack.h" + +//Testfunkionen zu push, pull, top & clearStack schreiben + +StackNode *push(StackNode *stack, void *data) +{ + if (!data) + { + return stack; //Nichts pushen + } + //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; + } + else + { + return NULL; + } +} + +// 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->next; //setzt den obersten Knoten auf den Zweiten im Stack + free(tmp->data); + free(tmp); + } +}