Partage
  • Partager sur Facebook
  • Partager sur Twitter

Déclaration d'une liste chainée

    27 mars 2017 à 22:48:42

    Bonsoir,

    J'ai besoin de construire une liste ou chaque maillon(nœud) contient trois champs: un champs qui contient la taille de la paire du ski (entier), un champs qui contient un pointeur vers une sous liste de réservation appelé "loc", et le dernier un pointeur vers l'adresse suivante; comme si dessous.

    Je trouve une difficulté: comment lier la première liste à la deuxième?

    et quand je crée la premiere liste "Ski" je vais initialiser "loc" à quoi sachant qu'au début la liste de réservation est vide (aucune location de ski).

    // ***** Les structures utilisées ***** //
    
    typedef struct Res Res;
    struct Res {
            int deb, fin, ind;
            Res * ressuiv;
            };
    
    //************************************//
    
    typedef struct Ski Ski;
    struct Ski {
             int taille;
             Res * loc;
             Ski * skisuiv;
             };
    
    //***********************************//
    
    void Cree_Ski(Ski *Mat)
    {
        Ski *p,*q;
        int t,i,n;
        p= All_Ski();
        Mat= All_Ski();
        Mat= p;
        printf("Donner le nombre de paires de Skis.\n");
        scanf("%d",&n);
        printf("Donner la taille de la paire de ski n°1.\n");
        scanf ("%d", &t);
        Aff_taille(p,t);
        for(i=1;i<n; i++)
        {
            printf("Donner la taille de la paire de ski n° %d. \n", i+1);
            scanf ("%d", &t);
            q=All_Ski();
            Aff_adr_ski(p,q);
            p=q;
            Aff_taille(p,t);
        }
        Aff_adr_ski(q,NULL);
    }

    • Partager sur Facebook
    • Partager sur Twitter
      28 mars 2017 à 1:14:15

      Bonjour,

      Pour dire qu'un pointeur pointe nulle part, on lui affecte la valeur NULL.

      Ski* All_Ski() {
         Ski* ski = malloc( sizeof Ski );
         ski->Res = NULL;
         ski->skisuiv = NULL;
         return ski;
      }

      Pour lier les skis entre-eux, on doit mettre dans le skisuiv du précédent, le pointeur qui vient d'être alloué sur le suivant (comme sur le schéma)

      p->skisuiv = q;    // à mettre avant p = q; pour que p devienne le nouveau dernier
      




       

      • Partager sur Facebook
      • Partager sur Twitter

      En recherche d'emploi.

        28 mars 2017 à 10:37:55

        J'ai oublié de préciser certaines fonctions All_Ski c'est pour allouer, et Aff_adr_ski c'est pour dire que

        p -> skisuiv=q

        Ski * All_Ski ()
             {
                return ((Ski*)malloc(sizeof(Ski)));
             }
        
        //***********************************//
        
        Res * All_Res ()
             {
                return ((Res*)malloc(sizeof(Res)));
             }
        
        //***********************************//
        
        void Aff_adr_ski(Ski*p, Ski*q)
        {
          p -> skisuiv = q;
        }
        
        //***********************************//
        
        void Aff_adr_res (Res*p, Res*q)
        {
          p -> ressuiv = q;
        }
        
        //***********************************//
        
        Ski* Suivant_S(Ski*p)
        {
          return (p -> skisuiv);
        }
        
        //***********************************//
        
        Res* Suivant_R(Res*p)
        {
          return (p -> ressuiv);
        }
        
        //***********************************//



        -
        Edité par RoseJack 28 mars 2017 à 10:38:43

        • Partager sur Facebook
        • Partager sur Twitter

        Déclaration d'une liste chainée

        × 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