Frage

Ich versuche, meine Struktur nach Namen (alphabetisch) zu sortieren.Zum Beispiel habe ich diese Struktur:

struct person{
    char name[MAX];
    char num[MAX];
    char email[MAX];
    struct person *next;   
    struct person *previous;  
};

struct person *next, *first, *end;

und in meiner Hauptfunktion :

int main()
{
 struct person p = {{0}}
 .
 .
 .
 switch(choice)
    {
    case 1 : 
        printf("Name   : "); scanf("%s", &p.name);
        printf("Num : "); scanf("%s", &p.num);
        printf("E-Mail   : "); scanf("%s", &p.email);
        input(p); //function to input data    
        break;
    case 2 : 
        sort(p); //function to sort the data
        break;
               }
}

Und in meiner Prototypenfunktion:

void sort(struct person p)
{
    struct person *ptr, *ptr2, *temp;

    ptr=first;
    ptr2=first;

    for (ptr= first; ptr!= NULL; ptr= ptr->next)
    {
        for (ptr2= ptr2->next; ptr2!= NULL; ptr2= ptr2->next)
        {
            if (strcmp(ptr->name, ptr2->name) > 0)
            {
                temp = ptr;
                ptr= ptr2;
                ptr2= temp;
            }
        }
    }

}

Okay, ich habe also eine Prototypfunktion, die die Struktur nach ihrem Element sortiert, das name ist.Ich habe versucht, es nach dem gleichen Prinzip wie bublesort zu sortieren, aber es hat bei mir nicht geklappt.Zeiger ptr zeigt auf den ersten Knoten in der Liste und ptr2 zeigt auf den zweiten Knoten.Ist mein Algorithmus falsch?Ich kann anscheinend nicht herausfinden, was los ist.Hauptproblem ist die Sortierung.Ich hoffe, meine Frage ist klar.

War es hilfreich?

Lösung

innere Schleife

generasacodicetagpre.

sollte

sein generasacodicetagpre.

(Beachten Sie den generationspflichtigen ptr2 vs. ptr).

edit:

Swapping-Zeiger funktionieren auch nicht.Sie müssen auf Elemente umrippen, die Helfervariablen in den Schleifen benötigen.Dinge können, wenn Sie mit Referenzen arbeiten können, eleganter (-> Umgang mit Leiterliste):

generasacodicetagpre.

edit:

Implementieren von Linux-Kernel wie verknüpfte Listen (mit einem an der Vorder- und Schwanz der Liste verknüpften Dummy-Heads) machen die Dinge in der Swap-Methode einfacher, da Nullzeigerprüfungen weggelassen werden können.Z.B.Liste würde aussehen

generasacodicetagpre.

Andere Tipps

Tauschen Sie keine Zeiger, tauschen Sie Werte aus.Außerdem müssen Sie leere Zeiger auf initialisieren NULL, sie sind nicht standardmäßig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top