# [C] Stack sortieren



## Freak_Desperado (21. Dezember 2007)

Hallo!
Ich versuche meinen Stack zu sortieren.
Hat jemand einen guten Ansatz dazu?


Gruß Michi


----------



## deepthroat (21. Dezember 2007)

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? 

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

Gruß


----------



## Freak_Desperado (21. Dezember 2007)

Ich habe mir folgenden Datentyp gemacht:


```
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


----------



## BOND_WR (21. Dezember 2007)

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.


----------



## deepthroat (21. Dezember 2007)

Hi.





BOND_WR hat gesagt.:


> 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++.


Freak_Desperado hat gesagt.:


> Ich habe mir folgenden Datentyp gemacht:
> 
> 
> ```
> ...


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ß


----------



## Freak_Desperado (21. Dezember 2007)

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

Findet ihn jemand von euch?

```
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");
    }
}
```


----------

