diff --git a/stack.c b/stack.c index 1309122..8f9d54b 100644 --- a/stack.c +++ b/stack.c @@ -20,33 +20,33 @@ StackNode *createNode(void *data) { - StackNode *node = - malloc(sizeof(StackNode)); // Speicher reservieren, Speicherplatz für das - // struct StackNode + StackNode *node = malloc(sizeof(StackNode)); if (node == NULL) - return NULL; // Speicher konnte nicht reserviert werden + return NULL; - node->data = data; // Zeiger auf data neuer node - node->next = NULL; // nächster Zeiger ist NULL, Ende der Liste + node->data = data; + node->next = NULL; + node->prev = NULL; - return node; // pointer auf den neuen Knoten zurückgeben + return node; } // Pushes data as pointer onto the stack. StackNode *push(StackNode *stack, void *data) { - StackNode *newNode = createNode(data); // Speicher für neuen Knoten - // reservieren + StackNode *newNode = createNode(data); - if (newNode == NULL) { // wenn Speicher nicht reserviert werden konnte, wird - // stack unverändert zurückgegeben + if (newNode == NULL) { return stack; } - newNode->next = stack; // pointer verschieben + newNode->next = stack; + if (stack != NULL) { + stack->prev = newNode; + } - return newNode; // Zeiger auf neuen Speicherbereich zurückgeben + return newNode; } // Deletes the top element of the stack (latest added element) and releases its @@ -57,6 +57,9 @@ StackNode *pop(StackNode *stack) { return NULL; StackNode *nextNode = stack->next; + if (nextNode != NULL) { + nextNode->prev = NULL; + } free(stack); @@ -66,7 +69,7 @@ StackNode *pop(StackNode *stack) { } // Returns the data of the top element. -void *top(StackNode *stack) { return stack != NULL ? stack->data : NULL; } +void *top(StackNode *stack) { return stack ? stack->data : NULL; } // Clears stack and releases all memory. void clearStack(StackNode **stack) { diff --git a/test_stack.c b/test_stack.c index 78b019b..abd14c0 100644 --- a/test_stack.c +++ b/test_stack.c @@ -8,14 +8,12 @@ void test_createNode(void) { int testInt = 26; - StackNode *testNode = createNode(&testInt); TEST_ASSERT_NOT_NULL(testNode); - TEST_ASSERT_EQUAL_PTR(&testInt, testNode->data); - TEST_ASSERT_NULL(testNode->next); + TEST_ASSERT_NULL(testNode->prev); free(testNode); } @@ -27,18 +25,16 @@ void test_deleteTopElement(void) {} void test_returnData(void) {} void test_clearStack(void) { - int testInts[] = {1, 2, 3, 4, 5}; - StackNode *testStack = NULL; + StackNode *stack = NULL; - // Stack füllen for (int i = 0; i < 5; i++) { - testStack = push(testStack, &testInts[i]); + stack = push(stack, &testInts[i]); } - clearStack(&testStack); + clearStack(&stack); - TEST_ASSERT_NULL(testStack); + TEST_ASSERT_NULL(stack); } void setUp(void) {} @@ -49,6 +45,7 @@ int main(void) { UNITY_BEGIN(); printf("------------------------stack test------------------------\n"); + RUN_TEST(test_createNode); RUN_TEST(test_pushDataToStack); RUN_TEST(test_deleteTopElement);