unnötige Bedingung entfernt

This commit is contained in:
Kristin 2025-12-15 16:28:23 +01:00
parent 511611973f
commit 16f3961eb4
2 changed files with 25 additions and 8 deletions

View File

@ -0,0 +1,3 @@
krisp3;6987
krisp2;4985
krisp;3991

View File

@ -16,13 +16,15 @@
// implementation of the binary search tree to check for possible duplicates // implementation of the binary search tree to check for possible duplicates
// while creating random numbers. // while creating random numbers.
// typedef int (*CompareFctType)(const void *arg1, const void *arg2);
// vergleicht zwei Werte: a<b: -1 a>b: 1 a=b: 0 // vergleicht zwei Werte: a<b: -1 a>b: 1 a=b: 0
int compareUnsignedInt(const void *a, const void *b) { int compareUnsignedInt(const void *a, const void *b) {
unsigned int x = *(unsigned int *)a; unsigned int x = *(unsigned int *)a;
unsigned int y = *(unsigned int *)b; unsigned int y = *(unsigned int *)b;
return (x < y) ? -1 : (x > y); return (x < y) ? -1 : (x > y);
} }
// numbers = createNumbers(numberOfElements);
// es wird die angefragte Länge des Arrays übergeben
unsigned int *createNumbers(unsigned int len) { unsigned int *createNumbers(unsigned int len) {
if (len < 2) // Duplikat bei einem Eintrag sinnlos if (len < 2) // Duplikat bei einem Eintrag sinnlos
return NULL; return NULL;
@ -30,13 +32,19 @@ unsigned int *createNumbers(unsigned int len) {
unsigned int *numbersArray = malloc( unsigned int *numbersArray = malloc(
sizeof(unsigned int) * len); // Speicher für das Ausgabearray reservieren: sizeof(unsigned int) * len); // Speicher für das Ausgabearray reservieren:
// Größe eines Eintrags * Größe des Arrays // Größe eines Eintrags * Größe des Arrays
if (!numbersArray) // Speicher konnte nicht reserviert werden if (numbersArray == NULL) // Speicher konnte nicht reserviert werden
return NULL; return NULL;
/*typedef struct node {
void *data;
struct node *left;
struct node *right;
} TreeNode;*/
TreeNode *root = TreeNode *root =
NULL; // Binärbaum zum Generieren der Zufallszahlen ohne Duplikate NULL; // Binärbaum zum Generieren der Zufallszahlen ohne Duplikate
for (unsigned int i = 0; i < len; i++) { for (unsigned int i = 0; i < len; i++) { // angefordertes Array füllen
unsigned int currentNumber; unsigned int currentNumber;
int isDuplicate; int isDuplicate;
do { // mindestens eine Zufallszahl erzeugen do { // mindestens eine Zufallszahl erzeugen
@ -48,7 +56,10 @@ unsigned int *createNumbers(unsigned int len) {
// bei Vergleichen übergeben // bei Vergleichen übergeben
} while (isDuplicate); // wenn isDuplicate gesetzt wird, muss eine neue Zahl } while (isDuplicate); // wenn isDuplicate gesetzt wird, muss eine neue Zahl
// erzeugt werden, die Schleife wird wiederholt // erzeugt werden, die Schleife wird wiederholt
numbersArray[i] = currentNumber; numbersArray[i] =
currentNumber; // Schleife konnte verlassen werden -> kein Duplikat
// gefunden, Zahl für den aktuellen Iterationsschritt
// wird im Array gespeichert
} }
// Ein zufälliges Duplikat erzeugen // Ein zufälliges Duplikat erzeugen
@ -64,7 +75,8 @@ unsigned int *createNumbers(unsigned int len) {
numbersArray[duplicateIndex]; // Wert vom ersten Index kopieren numbersArray[duplicateIndex]; // Wert vom ersten Index kopieren
clearTree(&root); // Speicher wieder freigeben, wird nicht mehr benötigt clearTree(&root); // Speicher wieder freigeben, wird nicht mehr benötigt
return numbersArray; return numbersArray; // numbers wird zum pointer auf in der Funktion
// erstelltes Array
} }
// Returns only the only number in numbers which is present twice. Returns zero // Returns only the only number in numbers which is present twice. Returns zero
@ -72,13 +84,15 @@ unsigned int *createNumbers(unsigned int len) {
unsigned int getDuplicate( unsigned int getDuplicate(
const unsigned int *numbers, const unsigned int *numbers,
unsigned int len) { // array numbers, sowie die Länge wird übergeben unsigned int len) { // array numbers, sowie die Länge wird übergeben
if (!numbers || len < 2) if (!numbers || len < 2)
return 0; // fehlerhaftes Array return 0; // fehlerhaftes Array
TreeNode *root = NULL; // leerer Baum TreeNode *root = NULL; // leerer Baum
unsigned int duplicateValue = 0; // Wert des Duplikats unsigned int duplicateValue = 0; // Wert des Duplikats
for (unsigned int i = 0; i < len && duplicateValue == 0; i++) { // Schleife for (unsigned int i = 0; i < len && duplicateValue == 0;
i++) { // Schleife bricht ab, sobald das Duplikat gefunden wurde
int isDuplicate = 0; int isDuplicate = 0;
// Zahl in den Baum einfügen // Zahl in den Baum einfügen
@ -86,7 +100,7 @@ unsigned int getDuplicate(
compareUnsignedInt, &isDuplicate); compareUnsignedInt, &isDuplicate);
// Duplikat erkannt // Duplikat erkannt
if (isDuplicate && duplicateValue == 0) { if (isDuplicate == 1) {
duplicateValue = numbers[i]; // Duplikat merken, for-Schleife wird beendet duplicateValue = numbers[i]; // Duplikat merken, for-Schleife wird beendet
} }
} }