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

- - Dernière réponse :  Yeah - 8 janv. 2014 à 18:43
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;
          }
}
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
9713
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
13 septembre 2019
1098
1
Merci
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

Dire « Merci » 1

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

CCM 70880 internautes nous ont dit merci ce mois-ci

Mercii, j'ai compris mnt :)