diff --git a/stack.c b/stack.c index e3a90d4..9ceff19 100644 --- a/stack.c +++ b/stack.c @@ -6,28 +6,71 @@ * `pop`: entfernt das oberste Element, * `top`: liefert das oberste Element zurück, * `clearStack`: gibt den gesamten Speicher frei. */ + +/*typedef struct Stack{ + void *data; Zeiger auf den Nutzerdaten + struct Stack *next; Zeiger auf den Eintrag drunter +} StackNode; Stack oder StackNode kann beides als Namen für struct verwendet werden*/ + // stack->next --> greift auf Struct zu und zeigt auf dann auf next // Pushes data as pointer onto the stack. +// *stack ist Zeiger auf neustes oberste Element im Stack (wird zurückgegeben) +// *data soll gepusht werden StackNode *push(StackNode *stack, void *data) { - + if(data != NULL) + { + StackNode *top; + top = malloc(sizeof(*top)); + if(top == NULL) + { + return stack; + } + top->data = data; + if(stack == NULL) + { + top->next = NULL; + } + else + { + top->next = stack; + } + stack = top; + } + return stack; } // 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 != NULL) + { + StackNode *nextNode = stack->next; + free(stack); + stack = nextNode; + } + return stack; } // Returns the data of the top element. void *top(StackNode *stack) { - + if(stack == 0) + { + return NULL; + } + else + { + return stack->data; + } } // Clears stack and releases all memory. void clearStack(StackNode *stack) { - + while(stack != NULL) + { + stack = pop(stack); + } } \ No newline at end of file diff --git a/stack.h b/stack.h index f7d542d..43e236c 100644 --- a/stack.h +++ b/stack.h @@ -8,6 +8,10 @@ The latest element is taken from the stack. */ #include //TODO: passenden Datentyp als struct anlegen +typedef struct Stack{ + void *data; + struct Stack *next; +} StackNode; // Pushes data as pointer onto the stack. StackNode *push(StackNode *stack, void *data);