Hallo,
ich habe eine Logikfrage. Ich tüftle schon seit 2 Tagen an einer Sortierfunktion für eine verkettete Liste herum aber es scheint nicht ganz zu funktionieren.
Ziel ist es, dass nach einem Inhalt der Elemente (Katalognummern) sortiert wird, wobei das Element gleich richtig in der Liste eingefügt werden soll, nachdem die Daten über die Tasatur eingelesen wurden, sodass die Elemente nach Katalognummern ansteigend sortiert werden. Das Kuriose ist, dass es nur dann, und wirklich nur dann nicht funktioniert, wenn ich das erste Mal eine kleinere Katalognummer einlese, als die, die bereits vorhanden sind. Dieses Element wird nämlich an 2. Stelle von "vorne" eingefügt, also wenn zB 6 und 8 bereits exisitiert, wird 2 zwischen 6 und 8 eingehängt und nicht vor 6. Wenn ich dann weiter Daten einlesen, wird ab diesem Zeitpunkt richtig sortiert. Hier ist mal der relevante Codeabschnitt:
.
.
schueler *kopfzeiger;
.
.
void hinzufuegen() {
char temp[20];
int katnr, aktuelle_katalognr; //aktuelle_katalognr wird beim vergleichen benötigt, katnr zum Einlesen.
schueler *marker_schueler;
schueler *aktuell;
schueler *neuer_schueler;
std::cout << "Katalognummer: ";
std::cin >> katnr;
while (checkkatnr(katnr) != 0) { //Check ob Katalognummer bereits exisitert.
std::cout << "Diese Katalognummer existiert bereits!\n";
std::cout << "Katalognummer: ";
std::cin >> katnr;
}
neuer_schueler = new schueler; //Neue Instanz erzeugen.
neuer_schueler->katalognummer = katnr;
std::cout << "Vorname: ";
std::cin >> temp;
strcpy(neuer_schueler->vorname, temp);
std::cout << "Nachname: ";
std::cin >> temp;
strcpy(neuer_schueler->nachname, temp);
std::cout <<"\n";
aktuell = kopfzeiger;
marker_schueler = kopfzeiger;
if (aktuell != NULL) {
while (aktuell != NULL) {
aktuelle_katalognr = aktuell->katalognummer;
if (aktuelle_katalognr < katnr) {
marker_schueler = aktuell;
}
aktuell = aktuell->next;
}
neuer_schueler->next = marker_schueler->next;
marker_schueler->next = neuer_schueler;
} else {
neuer_schueler->next = kopfzeiger;
kopfzeiger = neuer_schueler;
}
}
Hier habe ich einen Mitschnitt des seltsamen Verhaltens:
http://tools.acid4u.com/prog.txt
Ich hoffe jemand weiß, was zu tun ist, sodass die Liste richtig sortiert wird.
Markus.
--
sh:( fo:| ch:? rl:( br:> n4:( ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:] js:|