From 7ee5ad0b368616a585aa272868c4f023e02c2664 Mon Sep 17 00:00:00 2001 From: Bannach Date: Tue, 2 Dec 2025 17:42:33 +0100 Subject: [PATCH] Stackfunktionen --- bintree.c | 39 ++++++++++++++++------------ highscores.txt | 2 ++ makefile | 9 +++---- numbers.c | 22 ++++++++++++++++ runStackTests.exe | Bin 0 -> 58347 bytes stack.c | 65 ++++++++++++++-------------------------------- stack.o | Bin 0 -> 1213 bytes test_stack.c | 8 +++--- 8 files changed, 73 insertions(+), 72 deletions(-) create mode 100644 runStackTests.exe create mode 100644 stack.o diff --git a/bintree.c b/bintree.c index 56601c2..5ac7291 100644 --- a/bintree.c +++ b/bintree.c @@ -8,6 +8,7 @@ * `treeSize`: zählt die Knoten im Baum (rekursiv), * `nextTreeData`: Traversierung mit Hilfe des zuvor implementierten Stacks. */ +static StackNode *stack = NULL; TreeNode* createNode(const void *data, size_t dataSize) { TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode)); @@ -34,36 +35,31 @@ // if isDuplicate is NULL, otherwise ignores duplicates and sets isDuplicate to 1 (or to 0 if a new entry is added). TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFctType compareFct, int *isDuplicate) { - TreeNode *newNode = createNode(data,dataSize); + if (root == NULL) - { if (isDuplicate!=NULL) { - *isDuplicate = 0; - } + { + TreeNode *newNode = createNode(data,dataSize); + if (isDuplicate) + *isDuplicate = 0; + return newNode; } - if (compareFct(root->data, newNode->data)==0) + if (compareFct(root->data, data)==0) { - if (isDuplicate==NULL) { - free(newNode); - root->left = addToTree(root->left, data, dataSize, compareFct, isDuplicate); - } - else - { - free(newNode->data); - free(newNode); + if (isDuplicate != NULL) { *isDuplicate=1; return root; } + TreeNode *newNode = createNode(data,dataSize); + return newNode; } - else if (compareFct(root->data, newNode->data)>0) + else if (compareFct(root->data, data)>0) { - free(newNode); root->left = addToTree(root->left, data, dataSize, compareFct, isDuplicate); } - else if (compareFct(root->data, newNode -> data)<0) + else if (compareFct(root->data, data)<0) { - free(newNode); root->right= addToTree(root->right, data, dataSize, compareFct, isDuplicate); } return root; @@ -75,6 +71,15 @@ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFc void *nextTreeData(TreeNode *root) { + if (root != NULL) { + clearStack(stack); + stack = NULL; + } + while (root != NULL) + { + stack = push(stack, root->data); + root = root->left; + } } // Releases all memory resources (including data copies). diff --git a/highscores.txt b/highscores.txt index dc3e92c..3bb0566 100644 --- a/highscores.txt +++ b/highscores.txt @@ -1,3 +1,5 @@ player_name;18989 +test;9905 player_name;4983 +highscores.txt;4979 player1;3999 diff --git a/makefile b/makefile index 1f15f75..db88541 100644 --- a/makefile +++ b/makefile @@ -35,15 +35,14 @@ $(program_obj_filesobj_files): %.o: %.c # -------------------------- # Unit Tests # -------------------------- -unitTests: - echo "needs to be implemented" - +stackTests: stack.o test_stack.c $(unity_strc) + $(CC) $(CFLAGS) $(LDFLAGS) -I$(unityfolder) $^ -o runStackTests # -------------------------- # Clean # -------------------------- clean: ifeq ($(OS),Windows_NT) - del /f *.o doble + del /f *.o doble doble_initial runStackTests else - rm -f *.o doble + rm -f *.o doble doble_initial runStackTests endif \ No newline at end of file diff --git a/numbers.c b/numbers.c index f59d9a2..2b2719f 100644 --- a/numbers.c +++ b/numbers.c @@ -10,13 +10,35 @@ * Sicherstellen, dass beim Befüllen keine Duplikate entstehen. * Duplizieren eines zufälligen Eintrags im Array. * in `getDuplicate()`: Sortieren des Arrays und Erkennen der doppelten Zahl durch Vergleich benachbarter Elemente. */ +int compareFct(const void *a, const void *b) + { + return *(int*)a - *(int*)b; + } // Returns len random numbers between 1 and 2x len in random order which are all different, except for two entries. // Returns NULL on errors. Use your implementation of the binary search tree to check for possible duplicates while // creating random numbers. unsigned int *createNumbers(unsigned int len) { + TreeNode *root = NULL; + unsigned int* numbers = malloc(len * sizeof(unsigned int)); + srand(time(NULL)); + while(treeSize(root)yXlA2y@ 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 Sn(0p!Y#F1N3b)J&_5TM}+BBp9 literal 0 HcmV?d00001 diff --git a/stack.c b/stack.c index ddf0437..a9411d1 100644 --- a/stack.c +++ b/stack.c @@ -11,66 +11,39 @@ StackNode *push(StackNode *stack, void *data) { - // 1. Einen neuen StackNode erstellen - StackNode *newNode = (StackNode *)malloc(sizeof(StackNode)); - - // Überprüfen, ob die Speicherreservierung erfolgreich war - if (newNode == NULL) - { - // Wenn malloc fehlschlägt, geben wir NULL zurück, um einen Fehler anzuzeigen. - return NULL; - } - - // 2. Die Daten in den neuen Knoten legen - newNode->data = data; - - // 3. Den 'next'-Zeiger des neuen Knotens auf den aktuellen Stack-Top setzen - // Der neue Knoten zeigt nun auf das Element, das zuvor ganz oben war. - newNode->next = stack; - - // 4. Den neuen Knoten als neuen Stack-Top zurückgeben - // Er ist jetzt das oberste Element. - return newNode; } // 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) { -// 1. Überprüfen, ob der Stack leer ist - if (stack == NULL) - { - // Wenn der Stack leer ist, gibt es nichts zu entfernen. - // Wir geben NULL zurück, da der Stack immer noch leer ist. - return NULL; - } - // 2. Einen Zeiger auf das aktuelle oberste Element speichern - // Dieses Element wollen wir entfernen und dessen Speicher freigeben. - StackNode *oldTop = stack; - - // 3. Den Stack-Zeiger auf das nächste Element im Stack setzen - // Das Element, das unter dem alten Top lag, wird jetzt zum neuen Top. - StackNode *newTop = stack->next; - - // 4. Den Speicher des alten obersten Elements freigeben - // Wichtig: Die Daten, auf die oldTop->data zeigt, werden hier NICHT freigegeben. - // Das muss, wie in der .h-Datei beschrieben, vom Aufrufer erledigt werden, - // falls die Daten dynamisch alloziert wurden. - free(oldTop); - - // 5. Den neuen Stack-Top zurückgeben - return newTop; } // Returns the data of the top element. void *top(StackNode *stack) { - + if (stack == NULL) + { + return; + } + else + { + return stack->data; + } } // Clears stack and releases all memory. void clearStack(StackNode *stack) { - -} + StackNode *head = stack; + StackNode *current = head; + while(current) + { + free(current->data); + StackNode *nextNode = current->next; + free(current); + current = nextNode; + } + head = NULL; +} \ No newline at end of file diff --git a/stack.o b/stack.o new file mode 100644 index 0000000000000000000000000000000000000000..13ef7857fec006460afeb1baed2f42a17287e119 GIT binary patch literal 1213 zcmZ`&&x_MQ6rSm%Zjc3g5H0H-a;UJvHbz;O#Z#~>n@gc6#fzfZHtSZS4M{59!h#SG zLNDvxyH^h$^rq;a;Z<1BgU3Co@5>}HL+OK=_v8C!^77ui;p=k@a#~}onOPb$V{aN~ zw%p#6(l}!ehy#H#SnshpbYnM*EZ=O_`)uw<(Q<}FUV%4NFWeyL1AVtDHnVIqP<65XHJoMzv-ln+@vEtJ+qT<*2AyLWyx`)JlY}-adDjV+}6qdot;a+$dAp*|9=N1 zbCO>t&67g7F6#PSO>p`l#nx(dM0u`}aTgm2^cz~J4fI=D=r{B`S_ZAXPUp6i}#?I3c6fG>BERv@Vt?@|Cgm(lSc4RmSjcByY1s&4ZEekq7zn zm$4^2irv98b09<69!#Rc!sS$vn)3FLFTJsGkZII&kt1g*&N-;_A_spfKq~!!OyZ91X{dQe`c7Q4PU6DoEaQ m*Z0R|;i=B-AoPmn5RS-I(q@P`Z_Q>iHt;<+yoZieqyGT*Z=jn1 literal 0 HcmV?d00001 diff --git a/test_stack.c b/test_stack.c index b919500..ca865bb 100644 --- a/test_stack.c +++ b/test_stack.c @@ -48,7 +48,7 @@ void test_push_single_element() { stack = push(stack, data1); - assert_equals_ptr(data1, top(stack), "Top should be 10"); + assert_equals_ptr(data1, stack->data, "Top should be 10"); assert_equals_ptr(NULL, stack->next, "Next element should be NULL"); // Aufräumen @@ -67,7 +67,7 @@ void test_push_multiple_elements() { stack = push(stack, data2); // Stack: [20, 10] stack = push(stack, data3); // Stack: [30, 20, 10] - assert_equals_int(30, *(int*)top(stack), "Top should be 30"); + assert_equals_int(30, *(int*)stack->data, "Top should be 30"); assert_equals_int(20, *(int*)stack->next->data, "Second element should be 20"); assert_equals_int(10, *(int*)stack->next->next->data, "Third element should be 10"); assert_equals_ptr(NULL, stack->next->next->next, "Fourth element should be NULL"); @@ -91,14 +91,14 @@ void test_pop_single_element() { int *data1 = (int *)malloc(sizeof(int)); *data1 = 10; stack = push(stack, data1); // Stack: [10] - assert_equals_int(10, *(int*)top(stack), "Top should be 10 before pop"); + assert_equals_int(10, *(int*)stack->data, "Top should be 10 before pop"); // Daten freigeben, bevor der Knoten freigegeben wird free(top(stack)); // Freigabe von data1 stack = pop(stack); // Stack: [] assert_equals_ptr(NULL, stack, "Stack should be empty after popping last element"); - assert_equals_ptr(NULL, top(stack), "Top should be NULL after popping last element"); + assert_equals_ptr(NULL, stack->data, "Top should be NULL after popping last element"); } void test_pop_multiple_elements() {