[C] Stack sortieren

Hi.

Es gibt keinen Stack Datentyp in C. D.h. du hast diesen Stack selbst geschrieben. Wie soll dir jetzt jemand sagen, wie du diesen Stack sortieren kannst, wenn du keine Details über die Implementierung angibst? :mad:

Wenn du ein Array verwendet hast für den Stack, kannst du die qsort Funktion zum sortieren verwenden. :google:

Gruß
 
Ich habe mir folgenden Datentyp gemacht:

Code:
typedef struct azubi{
    char   name[MAX_ELEMENTS];
    char   vorname[MAX_ELEMENTS];
    int    personalnummer;
    struct azubi *next;
} azubi;

azubi *start = NULL;
Dann kommen nach und nach die Elemente hinzu.
Und jetzt weiß ich nicht, wie ich den z.B. nach der Personalnummer sortieren kann.


Gruß Michi
 
Gleiche Bemerkung wie deepthroat, du musst schon sagen welchen Datentyp du für einen Stack verwenden willst.
Du kannst einen vector nehmen, der bietet Stack ähnliche Funktionen wie push_back und pop_back.
Dort könntest du dann std::sort benutzen.
 
Hi.
Gleiche Bemerkung wie deepthroat, du musst schon sagen welchen Datentyp du für einen Stack verwenden willst.
Du kannst einen vector nehmen, der bietet Stack ähnliche Funktionen wie push_back und pop_back.
Dort könntest du dann std::sort benutzen.
Es geht um C - nicht um C++.
Ich habe mir folgenden Datentyp gemacht:

Code:
typedef struct azubi{
    char   name[MAX_ELEMENTS];
    char   vorname[MAX_ELEMENTS];
    int    personalnummer;
    struct azubi *next;
} azubi;

azubi *start = NULL;
Dann kommen nach und nach die Elemente hinzu.
Und jetzt weiß ich nicht, wie ich den z.B. nach der Personalnummer sortieren kann.
Für eine solche einfach verkettete Liste musst du dir selbst eine Sortierfunktion erstellen. Dazu wählst du einen geeigneten Sortieralgorithmus aus und implementierst ihn für diese Liste. Ganz einfach wäre z.B. Bubblesort.

Gruß
 
Ich hab da jetzt mal etwas gemacht.
Irgendwo muss da noch ein Denkfehler sein.

Findet ihn jemand von euch?
Code:
void sortAzubisByPersnr(void){
    azubi *zeiger1;
    azubi *zeiger2;
    azubi *tempZeiger1;
    azubi *tempZeiger2;
    azubi *prevZeiger = NULL;
    int   i = 0;

    if(start != NULL){
        zeiger1 = start;
        zeiger2 = zeiger1->next;
        while(zeiger2 != NULL){
            while(zeiger2 != NULL){
                tempZeiger1 = zeiger1;
                tempZeiger2 = zeiger2;
                if(zeiger1->personalnummer > zeiger2->personalnummer){
                    zeiger1 = zeiger2;
                    zeiger2 = tempZeiger1;
                    zeiger1->next = zeiger2;
                    zeiger2->next = tempZeiger2->next;
                    if(prevZeiger != NULL){
                        prevZeiger->next = zeiger1;
                    }
                }
                if(i > 0){
                    start = zeiger1;
                }
                i++;
                zeiger2 = zeiger2->next;
            }
            prevZeiger = zeiger1;
            zeiger1 = zeiger1->next;
            zeiger2 = zeiger1->next;
        }
    }else{
        printf("Keine Azubis zum Sortieren vorhanden.\n");
    }
}
 
Zurück