tri et liste chainée double
Bonjour à tous,
Je dois faire un programme qui trie une liste chainée double selont différents criteres. Pour commencer j'ai décidé de ne classer la liste chainnée que par nom.
Malheureusement je n'ai pas le résultat escompté.
Au moment de l'affichage, cela m'affiche le une ligne à l'infini.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
LISTE *tri_insertion(LISTE *liste,char choix)
{
LISTE *liste_triee; //liste toujours triée
ENTREE *tmp;
ENTREE *courant;
liste_triee=creer_liste();
while((liste->t)>1)
{
tmp=liste->first->next;
courant=liste->first;
while(courant!=NULL)
{
if(strcmp(courant->nom,tmp->nom)<0)
{
tmp=courant;
}
courant=courant->next;
}
if(tmp->previous==NULL)
{
liste->first=tmp->next;
}
else
{
if(tmp->next==NULL)
{
tmp->previous->next=NULL;
}
else
{
tmp->previous->next=tmp->next;
tmp->next->previous=tmp->previous;
}
}
ajoute_entree(tmp,liste_triee);
liste->t--;
}
ajoute_entree(liste->first,liste_triee);
return liste_triee;
} |
et la fonction ajoute_entree :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
void ajoute_entree(ENTREE *entree, LISTE *liste) // ajoute une entree à la fin d'une liste initialisee ou existante (cfr. creer_liste())
{
// (ne manipule pas les donnees).
entree->previous=NULL;
entree->next=NULL;
if(liste->t==0)
{
liste->first=entree;
entree->previous=NULL;
}
else
{
ENTREE *courant;
ENTREE *previous;
courant=liste->first;
previous=liste->first;
while(courant->next!=NULL)
{
courant=courant->next;
if(courant->next==NULL)
{
previous=courant;
}
}
courant->next=entree;
entree->previous=previous;
}
liste->t++;
} |
J'ai refait l'exercice en algorithme sur une feuille et ca m'a l'air bon donc je comprends pas où est mon érreur...
merci de votre aide...