Partage
  • Partager sur Facebook
  • Partager sur Twitter

Liste chainé

refaire une autre structure

    8 avril 2021 à 13:53:30

    Bonjour,

    Liste* initialisation(void)
    {
    
    	Liste *liste = malloc(sizeof(*liste));
    	Element *element = malloc(sizeof(*element));
    
    	if (liste == NULL || element == NULL)
    		exit(EXIT_FAILURE);
    
    	element->nombre = 0;
    	element->suivant = NULL;
    	liste->premier = element; 
    	return liste;
    }

    Comme ci-dessus,  une fonction permettant de initialiser une liste.

    Pour ma part, je voudrais formuler de ma façon (pour savoir ci j'ai bien compris la fonction).

    Mon idéé est la suivante :

    void initialisation(Liste *liste)
    {
    
    	liste = malloc(sizeof(*liste));
    	Element *element = malloc(sizeof(*element));
    
    	if (liste == NULL || element == NULL)
    		exit(EXIT_FAILURE);
    
    	element->nombre = 0;
    	element->suivant = NULL;
    	liste->premier = element; 
    
    
    main()
         Liste *L = NULL;
         initialisation(L);
         
    return 0;
    
    }

    Ma reformulation de ma fonction ne fonctionne pas car j'ai aussi crée deux fonctions :

     - ajouter un élement dans une liste

    -afficher une liste

    avec laquel j'ai testé mais la liste ne fonction pas .

    Je trouve pas d'ou peut venir le soucis


    • Partager sur Facebook
    • Partager sur Twitter
      8 avril 2021 à 13:58:56

      Bonjour,

      une règle très informelle : si tu veux passer un argument à une fonction et que tu veux modifier cet argument dans la fonction et tu veux en plus que les modifications se voient en dehors de la fonction alors il faut passer un pointeur sur ce paramètre.

      Tu veux mettre, modifier et récupérer les modifications sur un Liste * ? Alors le type du paramètre doit être pointeur ce que tu veux, en l'occurrence une Liste * alors il faut passer un Liste ** ⇒

      void initialisation( Liste **ppl)



      • Partager sur Facebook
      • Partager sur Twitter
        8 avril 2021 à 14:39:02

        Mais ce que je ne comprend pas, c'est je passe bien l'adresse de la liste en parametre :

        initialisation(L);

        Comment ce fait t-il que que cela ne va pas changer L ?

        PS:

        Strucutre de la Liste :

        typedef struct Element Element;
        struct Element
        {
        	int nombre;
        	Element *suivant;
        };
        /*--------------------------------------------*/
        
        // definition : pointe sur le premier élement de liste
        typedef struct Liste Liste;
        struct Liste
        {
        	Element *premier;
        };




        • Partager sur Facebook
        • Partager sur Twitter
          8 avril 2021 à 14:43:07

          IbBk a écrit:

          Mais ce que je ne comprend pas, c'est je passe bien l'adresse de la liste en parametre :

          initialisation(L);

          Comment ce fait t-il que que cela ne va pas changer L ?

          Pour faire hypersimple : parce que ce n'est pas L qui est donné à la fonction mais une copie de L.

          • Partager sur Facebook
          • Partager sur Twitter
            8 avril 2021 à 15:00:03

            AHHH d'accoord,

            Vu que L est un pointeur qui pointeur vers rien.

            quand je fais initialisation(L);

            Je lui passe l'adressse que pointe L. Mais L ne pointe vers rien.

            Donc il faut un

            void initialisation( Liste **ppl)

            apres lors du main(),  je fais

            initialisation(&L);


            C'est bien ça ? (j'ai un doute)

            • Partager sur Facebook
            • Partager sur Twitter
              8 avril 2021 à 15:18:58

              Mais du coup,

              void initialisation(Liste **liste)
              {
              
              	liste = malloc(sizeof(*liste));
              	Element *element = malloc(sizeof(*element));
              
              	if (liste == NULL || element == NULL)
              		exit(EXIT_FAILURE);
              
              	element->nombre = 0;
              	element->suivant = NULL;
              	liste->premier = element; 
              	// return liste;
              }

              L'intérieur de ma fonction doit changer.

              car si je laisse comme cela j'ai warning qui dit :

              error: 
              member reference base type 'Liste *' (aka 'struct Liste *')
              is not a structure or union
              liste->premier = element;

               Comment résoudre le probléme du warning ?


              -
              Edité par IbBk 10 avril 2021 à 0:13:20

              • Partager sur Facebook
              • Partager sur Twitter

              Liste chainé

              × 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