Liste Simplement chainée (Insertion Ordre Decroissante) [Résolu/Fermé]

Signaler
-
 Yeah -
Bonjour à tous.
Je voudrais créer une fonction qui ajoute un element dans un ordre décroissante, j'ai fait ça mais je pense qu'il est incorrecte ..

typedef struct noeud{
        int a;
        struct noeud *suivant;
        }nombre;
nombre *premier;

void Insertion_Ordre_Decr(int a){
     nombre *p;
     p=(nombre *)malloc(sizeof(nombre));
     p->a=a;
     if(premier==NULL){
                       p->suivant=premier;
                       premier=p;
                       }
     else{
          nombre *pred;
          pred=premier;
          while((p->a)>(pred->a)) pred=pred->suivant;
          p->suivant=pred;
          pred=p;
          }
}

1 réponse

Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 207
Salut,
ce n'est pas si mal ce que tu as écrit.
Seulement, c'est ton insertion qui ne va pas.
tu cherches à insérer "p" juste avant l'élément plus petit que lui. Or tu sors de ton while en pointant sur l'élément d'après, tu as donc perdu la référence à l'élément précédent.
Lors d'une insertion d'un élément dans une liste chainé, il faut faire deux raccordement : accrocher l'élément à la chaine, et accrocher la fin de la chaine au nouvel élément.
Dans ton cas, tu ne fais que la dernière étape, car une fois de plus tu as perdu le "lien" vers l'élément précédent. Il faut donc que tu sorte du while une itération plus tôt.
Note : pred est une variable temporaire, ta dernière ligne ne sert à rien.
Attention aux deux cas limites p->a est le plus grand et p->a est le plus petit.
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Mercii, j'ai compris mnt :)