Ich versuche, eine doppelt verknüpfte Liste zu sortieren, aber ich habe einige Probleme. Ich bin ein Noob in C und ich denke, mein Problem ist mit Zeigern.C Bubblesort in LinkedList
Ich kann einfach nicht sehen, wie man zwei Positionen innerhalb der Liste und so ist vielleicht das ist das Problem.
Ich habe versucht, es mit Bubblesort zu sortieren, auch wenn ich weiß, dass die Komplexität nicht so gut ist, weil, wie ich noch lerne, ich dachte, dass es ein einfacher Start ist.
ich tryied auch einige Dinge über Leseelemente in einem LinkedList swaping und wie sie sortieren, aber ich bin wirklich mit diesem Problem stecken ...
PS: Ich begann die für mit dem m-> weiter weil meine Liste eine Überschrift hat (m).
PS2: Ich erhalte die Fehlermeldung „Anfrage Mitglied‚next‘in etwas keine Struktur oder Union“, und weiß nicht, wie es die Kommentare lesen zu beheben
struct segment {
int x, y; /// position
char c; // letter
struct segment* next;
struct segment* prev;
};
void sortingSegments(struct segment* m) {
struct segment **j; struct segment **i;
for(i = &((m->next)->next); i !=NULL; i = i->next) {
for(j = &(m->next); j == i; j = j->next) {
if ((*j)->c > (*i)->c) {
struct segment **aux;
aux = i;
(*aux)->next = (*i)->next;
(*aux)->prev = (*i)->prev;
i = j;
(*i)->next = (*j)->next;
(*i)->prev = (*j)->prev;
j = aux;
(*j)->prev = (*aux)->prev;
(*j)->next = (*aux)->next;
}
}
}
}
Ihr Problem ist mit Zeigern. Sie müssen die Adresse der Liste übergeben, nicht nur einen Zeiger darauf ("m"), um die Fälle zu behandeln, in denen der erste Knoten seine Position ändert und die Listenadresse sich ändert. Sie brauchen also 'sortingSegments (struct Segment ** m)', dann können Sie einfach 'segment * j, .. * i' verwenden und die verbleibende Indirektionsstufe anpassen. Für den Fall, dass der erste Knoten vertauscht wird, vergessen Sie nicht, '* m = new_first_node_address;' zu setzen oder Ihre Liste wird nach der Sortierung abgebrochen. –