Sortieren einer verketteten Liste in C
Ich versuche zu Sortieren, eine verknüpfte Liste von finden der größte Wert, löschen Sie aus seiner position, und stecken Sie es an der Spitze der Liste.
Die Schwierigkeit, die ich in das eigentliche löschen und einfügen an der Spitze. Das Problem scheint zu sein in der if-Bedingung in der while-Schleife innerhalb der Funktion sortList, aber ich bin mir nicht sicher, wie es zu lösen ist.
Jede mögliche Hilfe würde geschätzt.
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int num;
struct node *next;
} Node, *NodePtr;
void printList(NodePtr np);
NodePtr makeList(void);
NodePtr makeNode(int n);
NodePtr sortList(NodePtr list);
int main(void) {
NodePtr list;
printf("Enter numbers for the list (0 to end)\n");
list = makeList();
printList(list);
list = sortList(list);
printList(list);
return 0;
}
NodePtr makeList(void) {
NodePtr makeNode(int), np, top, last;
int n;
top = NULL;
if(scanf("%d", &n) != 1)n = 0;
while(n != 0) {
np = makeNode(n);
if(top == NULL)top = np;
else last->next = np;
last = np;
if(scanf("%d", &n)!=1)n=0;
}
return top;
}
void printList(NodePtr np) {
while(np != NULL) {
printf("%d\n", np->num);
np = np->next;
}
}
NodePtr makeNode(int n) {
NodePtr np = (NodePtr)malloc(sizeof(Node));
np->num = n;
np->next = NULL;
return np;
}
NodePtr sortList(NodePtr list) {
NodePtr top = list;
NodePtr curr = NULL;
NodePtr largest;
NodePtr prev;
prev = NULL;
curr = top;
largest = top;
while(curr != NULL) {
prev = curr;
if(curr->num > largest->num) {
largest = curr;
prev->next = curr->next;
largest->next = top;
}
curr = curr->next;
}
if(prev == NULL) {
largest->next = top;
return largest;
}
return largest;
}
Es gibt eine Reihe von Fragen zum Sortieren von verketteten Listen in C, viele von Ihnen aufgeführten Fragen über die RHS auf der Seite. Haben Sie Blick auf alle von Ihnen zu sehen, wenn Sie relevant für dein problem?
InformationsquelleAutor maxmouse | 2012-08-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es Probleme in der
sortList
Funktion.Diese Funktion nur von einigen großen Knoten am Anfang der Liste. Es ist nicht soting alle in der Liste. Sie können Sie ein-sort-Algorithmus zum Sortieren der Datei : quicksort/bubblesort/...
ich habe eine code, der einer Sortierung am Ende dieser Antwort.
hier ist ein code dabei, die Sortierung der Liste :
//es wird einbauen größten Knoten mit zunächst einer, dann tun die gleiche operation mit Unterliste (die Liste-erstes element)
ty, fertig. mehr lisible code um eine Funktion zu verwenden, die Suche nach größte element und eine Funktion, die switch-Knoten.
Dieser Algorithmus funktioniert nicht, wenn Sie eine Liste wie diese: 524361
InformationsquelleAutor Hicham from CppDepend Team
Hier ist mein Versuch, zu Sortieren, eine einfach verknüpfte Liste mit QuickSort-Algorithmus. Wenn Sie wissen, dann n Laufzeit wird O(n log n). Überprüfen Sie, ob das hilft.
InformationsquelleAutor user1596193
Diese sollte wirklich helfen. Es ist ein sehr schöner Beitrag.
Lektion gelernt. Tun wird.
InformationsquelleAutor Prasanth
Schriftlich
largest->next
Sie überschriebencurr->next
. So dass Sie am Ende einen Neustart von oben die ganze Zeit.Stellen Sie sicher, dass:
Aber insgesamt ist dein code scheint zu stark gebrochen, ich glaube, es gibt vielleicht ein paar andere Fehler in deiner sortierlogik.
InformationsquelleAutor Anony-Mousse
Folgenden sind einige der Probleme, die es in Ihrem Sortier-Logik:
Kann der code modifiziert, wie unten (Nur einen Zeiger, die Sie brauchen, um zu überprüfen, für andere Probleme selbst):
InformationsquelleAutor Jay
InformationsquelleAutor Sagar Damle