diff --git a/.idea/editor.xml b/.idea/editor.xml
index 226ca24..1f0ef49 100644
--- a/.idea/editor.xml
+++ b/.idea/editor.xml
@@ -99,482 +99,482 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bintree.c b/bintree.c
index 5ac7291..86a2598 100644
--- a/bintree.c
+++ b/bintree.c
@@ -40,7 +40,7 @@ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFc
if (root == NULL)
{
TreeNode *newNode = createNode(data,dataSize);
- if (isDuplicate)
+ if (isDuplicate != NULL)
*isDuplicate = 0;
return newNode;
@@ -70,16 +70,10 @@ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFc
// push the top node and push all its left nodes.
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/numbers.c b/numbers.c
index 2b2719f..22da7b5 100644
--- a/numbers.c
+++ b/numbers.c
@@ -21,28 +21,45 @@ int compareFct(const void *a, const void *b)
unsigned int *createNumbers(unsigned int len)
{
TreeNode *root = NULL;
- unsigned int* numbers = malloc(len * sizeof(unsigned int));
- srand(time(NULL));
- while(treeSize(root)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
@@ -18,6 +39,30 @@ StackNode *push(StackNode *stack, void *data)
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.
@@ -25,7 +70,7 @@ void *top(StackNode *stack)
{
if (stack == NULL)
{
- return;
+ return NULL;
}
else
{
@@ -36,8 +81,7 @@ void *top(StackNode *stack)
// Clears stack and releases all memory.
void clearStack(StackNode *stack)
{
- StackNode *head = stack;
- StackNode *current = head;
+ StackNode *current = stack;
while(current)
{
free(current->data);
@@ -45,5 +89,4 @@ void clearStack(StackNode *stack)
free(current);
current = nextNode;
}
- head = NULL;
}
\ No newline at end of file