Partage
  • Partager sur Facebook
  • Partager sur Twitter

Encore des listes chainées...

Anonyme
    19 septembre 2019 à 21:32:11

    Bonjour ou Bonsoir,

    J'aurai deux question à vous poser la première comment est ma fonction "insertionTri" que voici : 

    void liste::insertionTri(maillon *x)
    {
        if(x->val>tete->val)
        {
            insertionEnTete(x);
        }
        if(x->val>queue->val)
        {
            insertionEnQueue(x);
        }
        else{
            maillon *p=tete;
            while(x->val>p->val and p!=NULL)
            {
                p=p->succ;
            }
            x->succ=p->succ;
            p->succ=x;
            x->pred=p;
            x->succ->pred=x;}
    }

    Deuxièmement j'ai un problème avec la prototype que mon prof m'a donné que voilà : 

    /* Objectif : Fusion de la liste appelante avec 
    une Liste L donnée en argument.
    La liste appelante et la liste L doivent se confondre.*/
    
    void liste::fusion(liste& L)

    Puis-je utiliser ma fonction "insertionTri" dans cette fonction et comment l'utiliser ? Je n'ai que L en argument ? si j'avais L et L1 j'aurais pu faire L.insertionTri(quelquechose) mais comment faire dans ce cas ?

    Merci à vous pour vos réponses !

    • Partager sur Facebook
    • Partager sur Twitter
      20 septembre 2019 à 12:09:29

      Bonjour,

      Ta fonction insertionTri() ne fonctionne pas correctement.
      Par exemple si la valeur à insérer est plus grande que tete et plus grande que queue, tu fais à la fois une insertion en tete et une insertion en queue!

      Deuxièmement. La fonction fusion a bien 2 listes accessibles (le liste this et la liste L).
      Il suffit faut parcourir tous les éléments d'une liste et insérer l’élément dans l'autre liste.

      • Partager sur Facebook
      • Partager sur Twitter

      En recherche d'emploi.

      Anonyme
        20 septembre 2019 à 20:57:03

        Merci de ta réponse @Dalfab, donc dans ma fonction "insertionTri" j'ai ajouter un else if pour la queue et pour ma fonction fusion que voici : 
        void liste::fusion(liste& L)
        {
            maillon *p=L.tete;
            while(p->succ!=NULL)
            {
                this.insertionTri(p);
                p=p->succ;
            }
        }
        Quelque chose comme ça ?
        • Partager sur Facebook
        • Partager sur Twitter
          20 septembre 2019 à 21:44:35

          C'est pas trop mal, mais

          Il y a une erreur qui se passera très mal si la liste L est vide et qui empêche de gérer le dernier élément de L.
          this ne s'utilise pas comme cela, c'est un pointeur. On peut écrire this->insertionTri(p); ou plus simplement insertionTri(p);

          Et il reste au moins une erreur dans insertionTri().

          • Partager sur Facebook
          • Partager sur Twitter

          En recherche d'emploi.

          Anonyme
            20 septembre 2019 à 21:58:29

            d

            -
            Edité par Anonyme 23 septembre 2019 à 23:38:54

            • Partager sur Facebook
            • Partager sur Twitter
              20 septembre 2019 à 22:18:18

              Mominateur a écrit:

              Mon erreur dans "insertionTri" est la cause de mon segmentation fault ?

              Peut-être! fusion() aussi peut planter et tu n'indiques pas les codes de insertionEnTete() et insertionEnQueue().
              Ligne 8, tu utilises le test > ça parait okay (tu insères après le dernier si plus grand que le dernier). Mais est-ce qu'il faut aussi un > ligne 4 et ligne 14?
              Le test p!=NULL ligne 14 ne sert à rien car juste avant tu utilises p et s'il est NULL ça plante donc avant.


              • Partager sur Facebook
              • Partager sur Twitter

              En recherche d'emploi.

              Anonyme
                20 septembre 2019 à 22:28:51

                d

                -
                Edité par Anonyme 23 septembre 2019 à 23:38:37

                • Partager sur Facebook
                • Partager sur Twitter
                  23 septembre 2019 à 10:16:30

                  Bonjour,

                  Si ton maillon s'initialise correctement (les pointeurs doivent être forcé à 0 lors de la création du maillon), les fonctions d'insertion semblent okay.

                  En corrigeant la fonction d'insertionTri()  je vois rien qui provoque un plantage, sinon elle risque de planter ligne 21 pour vouloir atteindre un élément hypothétique.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  En recherche d'emploi.

                  Encore des listes chainées...

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown