unnötige Bedingung entfernt
This commit is contained in:
parent
511611973f
commit
16f3961eb4
@ -0,0 +1,3 @@
|
|||||||
|
krisp3;6987
|
||||||
|
krisp2;4985
|
||||||
|
krisp;3991
|
||||||
30
numbers.c
30
numbers.c
@ -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
|
||||||
@ -63,8 +74,9 @@ unsigned int *createNumbers(unsigned int len) {
|
|||||||
numbersArray[newIndex] =
|
numbersArray[newIndex] =
|
||||||
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user