Partage
  • Partager sur Facebook
  • Partager sur Twitter

C liste chainée

Sujet résolu
Anonyme
    13 avril 2006 à 2:12:25

    Bonsoir,

    Question bête:
    vous n'aurez pas quelques bons tutorial vraiment pour debutant sur les listes chainée? :honte:

    Merci d'avance

    J'ai COMPRIT!!!
    ceci:

    typedef struct exemple
    {
    int variable;
    }moi;

    C'est EXATEMENT la même chose que ceci:

    typedef struct exemple moi;
    struct exemple
    {
    int variable;
    };


    Qui est EXATEMENT la même chose que ceci:

    typedef struct
    {
    int variable;
    }moi;

    C'est juste une manière différente de crée un type.(la c'est une structure)
    • Partager sur Facebook
    • Partager sur Twitter
      13 avril 2006 à 3:25:49

      Dans le premier code, tu définies un nouveau type de variable "moi". Ton exemple est pas terrible parce que les noms des variables sont mals choisis. Je te ressortirais bien quelques un de mes bouts de codes, mais tu risquerais de rien comprendre non plus lol(je choisi très mal les noms moi aussi). Je serais toi, j'irais relire le cours de matéo sur les structures. (Oui parce que pour l'instant ton code, c'est juste une structure toute bête, pas une liste chainée).

      Bon aller je te donne un exemple parce qu'il est tard et que je suis fatigué lol !

      typedef struct
      {
      int age;
      }personne;

      personne moi; // Définition d'une variable "moi" de type "personne".

      moi.age=18;


      Pour les listes chaînées je te conseille d'aller voir du coté de http://c.developpez.com/cours/ ya de très bons tutos sur les listes chaînées.
      • Partager sur Facebook
      • Partager sur Twitter
      Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
      Anonyme
        13 avril 2006 à 5:21:00

        Exuse-moi mais je viens de comprendre.
        :):) merci quand même!

        Le SEUL truc que je cherche maintenant c'est
        des tutorials sur les structures chainées.
        • Partager sur Facebook
        • Partager sur Twitter
          13 avril 2006 à 7:17:40

          Citation : charly90


          Le SEUL truc que je cherche maintenant c'est
          des tutorials sur les structures chainées.


          http://nicolasj.developpez.com/articles/listesimple/
          http://nicolasj.developpez.com/articles/listedouble/
          • Partager sur Facebook
          • Partager sur Twitter
            13 avril 2006 à 8:17:20

            Citation : charly90

            vous n'aurez pas quelques bons tutorial vraiment pour debutant sur les listes chainée?


            http://nicolasj.developpez.com/articles/listesimple/

            Citation : Pas de titre


            J'ai COMPRIS!!!
            ceci:


            typedef struct exemple
            {
            int variable;
            }moi;


            C'est EXACTEMENT la même chose que ceci:


            typedef struct exemple moi
            struct exemple
            {
            int variable;
            };



            Il manque un ';'
            typedef struct exemple moi

            Citation : charly90


            Qui est EXACTEMENT la même chose que ceci:

            typedef struct
            {
            int variable;
            }moi;


            C'est juste une manière différente de crée un type.(la c'est une structure)


            C'est à peu près ça, oui... Et oui, il est utile de comprendre ça pour implémenter correctement les structures de données.
            • Partager sur Facebook
            • Partager sur Twitter
            Music only !
            Anonyme
              13 avril 2006 à 16:58:39

              j'ai pas bien comprit le tuto enfin j'ai comprit mais j'ai pas comprit enfin je me comprend
              vous aurez pas un code d'exemple complet sur ces fameuses liste chainée
              MERci d'avance
              • Partager sur Facebook
              • Partager sur Twitter
                13 avril 2006 à 17:05:02

                Citation : charly90

                j'ai pas bien comprit le tuto enfin j'ai comprit mais j'ai pas comprit enfin je me comprend
                vous aurez pas un code d'exemple complet sur ces fameuses liste chainée
                MERci d'avance


                Non. C'est à toi d'écrire un petit code de test. Par exemple
                • saisir des noms (max 32 caractères)
                • les stocker dans une liste chainée.
                • quand on a fini de saisir (fin de saisie = nom vide)
                • afficher la liste des noms.

                Si tu sais faire ça, tu as compris l'essentiel.

                Au boulot, et poste ton code si il y a un problème.
                • Partager sur Facebook
                • Partager sur Twitter
                Music only !
                Anonyme
                  13 avril 2006 à 18:50:32

                  oui mais je n'ai pas comprit la notion de liste chainés je sait detailler tout ce qui s'y trouve mais pas en faire une, alors si tu peu me donner un code d'exemple. :)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    13 avril 2006 à 19:23:22

                    Citation : charly90

                    oui mais je n'ai pas comprit la notion de liste chainés je sait detailler tout ce qui s'y trouve mais pas en faire une, alors si tu peu me donner un code d'exemple. :)


                    Non. C'est à toi d'écrire le code en appuyant un peu sur ton cerveau. Je suis sûr qu'on doit pouvoir en sortir un peu jus. Tu es encore jeune...

                    Commence par ecrire la structure de donnée d'un noeud selon les indications que j'ai donné au-dessus.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Music only !
                      13 avril 2006 à 19:31:26

                      Une liste chainée c'est tout con, ce sont des maillons reliés entre eux avec des pointeurs. Ya rien d'autre à comprendre.
                      C'est tellement simple que je ne vois pas l'intérêt de te pondre un code, que tu as peu de chance de comprendre si tu n'arrives pas à faire ça...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 avril 2006 à 20:05:46

                        Simplifie toi la vie au début fais une liste chainées simple (uniquement un pointeur vers l'élément suivant) et pas doube. ;)
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          14 avril 2006 à 11:23:38

                          j'ai trouver mais je ne voie aucun interêt a faire des liste chainée alors
                          essayer de me convaincre a en faire voici mon code :D:D

                          exuser moi mais je m'aspsetien de commentaire mais je l'ai fait moi même!
                          ma source:

                          #include <stdio.h>
                          #include <stdlib.h>
                          #include "structures.h"

                          int main()
                          {
                              liste maliste;

                              maliste.variableage = 15;

                              liste *news = NULL;

                              news = malloc(sizeof(liste));

                              news->variableage = 14;

                              maliste.pointeur = news;

                              printf("%d\n",maliste.variableage);

                              printf("%d\n",news->variableage);

                          return EXIT_SUCCESS;
                          }

                          mon header:

                          typedef struct structure liste;
                          struct structure
                          {
                              int variableage;
                              liste *pointeur;
                          };

                          j'ai bien crée ici 2 structure de manière differente que j'ai relier (enfin une)
                          avec un pointeur
                          • Partager sur Facebook
                          • Partager sur Twitter
                            14 avril 2006 à 11:37:31

                            Citation : charly90

                            j'ai trouver mais je ne voie aucun interêt a faire des liste chainée [..]
                            j'ai bien crée ici 2 structure de manière differente que j'ai relier (enfin une)
                            avec un pointeur



                            Est ce que tu as au moins pris la peine de lire les tutos sur les listes chainées que l'on te donne depuis le début du topic ? lol

                            Citation : iNaKoll (premiere reponse du topic)


                            Pour les listes chaînées je te conseille d'aller voir du coté de http://c.developpez.com/cours/ ya de très bons tutos sur les listes chaînées.



                            Regarde un peu a cette adresse, il y a plusieurs tutos sur les liste chaînées, les piles, les tas, les listes simples, doubles, etc... Commence par la pile ou liste simple, pour bien comprendre !

                            L'intérêt des listes chaînées, c'est de pouvoir allouer tout juste la mémoire suffisante pour faire fonctionner le programme. Imaginons que tu sois en train de lire un fichier de carnet d'adresses sans savoir combien il y aura de coordonnées dés le départ.
                            jean dupont jdupont@azery.rer
                            alfred durand adurand@otmal.lol
                            ...
                            gilbert dubois gdubois@qzer.no


                            Au lieu de lire le fichier en entier pour compter le nombre d'entrées et ensuite allouer un tableau de structure. Avec une liste chaînée, on ne fera qu'une lecture et on allouera la mémoire nécessaire en même temps.
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
                              14 avril 2006 à 11:43:34

                              Les listes chainées sont tres utiles pour faire des malloc dont on ne connait jamais la limite, enfin je me comprends, ca évite les realloc


                              Tiens, si tu veux, la page de mon prof d'info
                              http://h66.gramme.be/Bac2_2005/Cours/Documents/Cours7/SuitesChainees.pdf

                              Si tu veux un exemple, je peux t'en fournir un, je travaille justement la dessus
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                14 avril 2006 à 11:44:39

                                oui, jai lu les tuto (pas tous)
                                et ce que j'ai fait c'est une structure chainée
                                non?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  14 avril 2006 à 11:51:31

                                  Le principe de base d'une liste chainnée est bien expliqué ici :

                                  http://chgi.developpez.com/pile/

                                  On pourra difficilement t'expliquer mieux que dans ce tuto, alors je serais toi, j'irais le lire bien attentivement !

                                  Le code que tu as donnée, c'est du n'importe quoi... :lol:
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Inkamath on GitHub - Interpréteur d'expressions mathématiques. Reprise du développement en cours.
                                  Anonyme
                                    14 avril 2006 à 11:56:57

                                    abon je relit sur le champ
                                    dsl
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      14 avril 2006 à 12:57:19

                                      Citation : charly90

                                      j'ai trouver mais je ne voie aucun interêt a faire des liste chainée alors
                                      essayer de me convaincre a en faire voici mon code :D:D

                                      j'ai bien crée ici 2 structure de manière differente que j'ai relier (enfin une)
                                      avec un pointeur


                                      L'interêt est de lier des objets alloués. Attention à la terminologie. Un élément de liste est un noeud (node).

                                      Voici ton code reconçu dans l'esprit 'liste chainée'.

                                      #include <stdio.h>
                                      #include <stdlib.h>

                                      typedef struct node node_s;

                                      struct node
                                      {
                                         int age;
                                         node_s *p_next;
                                      };

                                      int main(void)
                                      {
                                         node_s *p_head;

                                         p_head = malloc(sizeof * p_head);

                                         if (p_head != NULL)
                                         {
                                            p_head->age = 15;
                                            p_head->p_next = NULL;

                                         }

                                         {
                                            node_s *p_news = malloc(sizeof * p_news);

                                            if (p_news != NULL)
                                            {
                                               p_news->age = 14;
                                               p_news->p_next = NULL;

                                            }

                                            /* chainage */
                                            p_head->p_next = p_news;
                                         }

                                         printf("%d\n", p_head->age);
                                         printf("%d\n", p_head->p_next->age);

                                         return EXIT_SUCCESS;
                                      }

                                      Pose des questions si tu ne comprends pas.

                                      Maintenant, je voudrais que tu fasses une fonction qui se comporte comme

                                         printf("%d\n", p_head->age);
                                         printf("%d\n", p_head->p_next->age);

                                      mais qui fonctionne quelle que soit le nombre d'éléments de la liste. Le mot clé des listes chainée, c'est la souplesse. Le code doit donc être Secret (cliquez pour afficher)
                                      "auto-démerdant"
                                      .

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Music only !
                                      Anonyme
                                        14 avril 2006 à 13:20:28

                                        YESSS :D:D:D:D:D:D:D:D:D:D:D
                                        j'ai fait ce que tu ma dit (enfin j'ai pas fini)
                                        Pour l'instant j'ai comprit ton code!

                                        En le modifiant a 2 endroits car je le comprend pas

                                        modification:

                                        //ceci:
                                        malloc(sizeof(node_s));
                                        //au lieu de cela:
                                        malloc(sizeof * p_head);

                                        //et la meme chose ici

                                        //ceci:
                                        malloc(sizeof(node_s));
                                        //au lieu de cela:
                                        malloc(sizeof * p_news);

                                        Dit moi si c'est pas la meme chose,
                                        car moi en voyant sa je trouve que c'est la même chose puisque
                                        l'in veut dire:

                                        1-Alloue de la memoire mais d'abord calcul la taille d'une structure du type "node_s"

                                        --------------------------------

                                        2-Et l'autre alloue de la memoire mais d'abord calcul la taille du type du pointeur "p_head" ou "p_news"(selon les cas)
                                        et comme le type du pointeur est une structure il alloue de la memoire pour une structure là c'est "node_s"(le nom de la structure).

                                        ---------------------------------

                                        ce qui revien au même,non? :o

                                        #include <stdio.h>
                                        #include <stdlib.h>
                                        #include "header.h"
                                        int main(void)
                                        {
                                            /*on declare en memoire une 1er structure et on l'adresse dans un pointeur*/
                                           node_s *p_head;
                                           p_head = malloc(sizeof(node_s));
                                        /*on declare en memoire une 1er structure et on l'adresse dans un pointeur*/
                                           /*si l'allocation a marcher alors on met dans la structures
                                           des valeurs*/

                                           if (p_head != NULL)
                                           {
                                              p_head->age = 15;
                                              p_head->p_next = NULL;

                                           }
                                           /*on declare en memoire une 2eme structure et on l'adresse dans un pointeur*/
                                              node_s *p_news;
                                              p_news = malloc(sizeof(node_s));
                                             /*on declare en memoire une 1er structure et on l'adresse dans un pointeur*/
                                            /*si l'allocation a marcher alors on met dans la structures
                                            des valeurs*/

                                              if (p_news != NULL)
                                              {
                                                 p_news->age = 14;
                                                 p_news->p_next = NULL;

                                              }

                                              /*on met dans le pointeur de la 1er structure l'adresse de la 2'eme
                                              structure*/

                                              p_head->p_next = p_news;

                                           printf("%d\n", p_head->age);
                                           printf("%d\n", p_head->p_next->age);
                                         /* une fois qu'on a fait sa on n'a plus qu'a appeller les valeurs mit dans
                                         mit la structure et dans les autres structure a partir du pointeur
                                        qui a servie a enregistrer l'adresse de la 1er structure et si on continue
                                        a regarder la liste on va se servir du pointeur qui est
                                        dans la 1er structure qui a servie a enregistrer l'adresse de la 2eme sructure
                                        et ainsi de suite jusque a l'infini :)*/

                                           return EXIT_SUCCESS;
                                        }

                                        dans le header:

                                        typedef struct node node_s;
                                        struct node
                                        {
                                           int age;
                                           node_s *p_next;
                                        };



                                        MERCII D'AVANCE!! t'es mieux qu'un tuto. :D:D:D
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        C 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