diff --git a/stack.c b/stack.c index e3a90d4..4057a99 100644 --- a/stack.c +++ b/stack.c @@ -8,9 +8,29 @@ * `clearStack`: gibt den gesamten Speicher frei. */ // Pushes data as pointer onto the stack. +static StackNode *createEmptyElement() +{ + return malloc(sizeof(StackNode)); +} StackNode *push(StackNode *stack, void *data) { - + StackNode *newElement = createEmptyElement(); + newElement->data = data; + newElement->next = NULL; + if (stack == NULL) + { + stack = newElement; + } + else + { + StackNode *currentElement = stack; + while(currentElement->next != NULL) + { + currentElement = currentElement->next; + } + currentElement->next = newElement; + return stack; + } } // Deletes the top element of the stack (latest added element) and releases its memory. (Pointer to data has to be diff --git a/stack.h b/stack.h index f7d542d..6d6d48b 100644 --- a/stack.h +++ b/stack.h @@ -8,6 +8,11 @@ The latest element is taken from the stack. */ #include //TODO: passenden Datentyp als struct anlegen +typedef struct node +{ + void *data; + struct node* next; +}StackNode; // Pushes data as pointer onto the stack. StackNode *push(StackNode *stack, void *data); @@ -22,4 +27,4 @@ void *top(StackNode *stack); // Clears stack and releases all memory. void clearStack(StackNode *stack); -#endif +#endif \ No newline at end of file diff --git a/test_stack.c b/test_stack.c new file mode 100644 index 0000000..d472b4b --- /dev/null +++ b/test_stack.c @@ -0,0 +1,20 @@ +#include +#include +#include +#include "stack.h" + +void testPushAddsElementCorrectly(void) +{ + int a = 10; + StackNode *node = push(NULL, &a); + + TEST_ASSERT_NOT_NULL(node); + TEST_ASSERT_EQUAL_INT(a, *((int*)node->data)); //void Zeiger in integer-Zeiger umwandeln +} + +int main(void) +{ + UNITY_BEGIN(); + RUN_TEST(testPushAddsElementCorrectly); + return UNITY_END(); +} \ No newline at end of file