Liste Simplement chainée (Insertion Ordre Decroissante)

Résolu/Fermé
Yeah - 8 janv. 2014 à 03:29
 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;
          }
}
A voir également:

1 réponse

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
Modifié par Char Snipeur le 8/01/2014 à 08:25
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
Mercii, j'ai compris mnt :)
0