Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Exercice] Liste chainée

Anonyme
    29 juin 2022 à 22:05:17

    Bonsoir j'ai besoin d'aide pour résoudre un exercice sur les listes chainé.

    Mon énoncé me demande de crée une liste chaînée dans l'ordre FIFO des moto et d'affiche les motos dont le prix est supérieur a 450 000f et les infos d'une moto sont : marque couleur vitesse prix.

    • Partager sur Facebook
    • Partager sur Twitter
      29 juin 2022 à 22:50:34

      Hello,

      Ça ne veut rien dire une liste chainée fifo. Bien sur, on peut insérer un élément dans une liste chainée toujours à la fin ou toujours au début, on peut supprimer un élément toujours au début ou toujours à la fin, mais pour le fifo, ça implique plutot un pile.

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        29 juin 2022 à 23:30:01

        edgarjacobs a écrit:

        Ça ne veut rien dire une liste chainée fifo. 

        FIFO : First In, First Out (Premier entré, premier sorti). 

        edgarjacobs a écrit:

        mais pour le fifo, ça implique plutot un pile.

        C'est plutôt une file ?! non ?

        CheickDiakité a écrit:

        Mon énoncé me demande de crée une liste chaînée dans l'ordre FIFO des moto et d'affiche les motos dont le prix est supérieur a 450 000f et les infos d'une moto sont : marque couleur vitesse prix.

        Désolé, mais j'ai rien compris !





        • Partager sur Facebook
        • Partager sur Twitter
        ...
          30 juin 2022 à 0:53:08

          Un FIFO c'est une file pas une pile. Ce qu'une lettre ça peut faire de différence: p/f ...
          @CheickDiakité:
          As-tu une idée comment implémenter une liste chaînée?
          Connais-tu les structures? Tu en auras besoin pour la liste chaînée et les informations sur tes moto.
          Tu auras besoin de connaissances sur les pointeurs.
          As-tu un peu de code à nous présenter?
          edit:

          rouIoude a écrit:
          Citation
          CheickDiakité a écrit:
          Citation
          Mon énoncé me demande de crée une liste chaînée dans l'ordre FIFO des moto et d'affiche les motos dont le prix est supérieur a 450 000f et les infos d'une
          moto sont : marque couleur vitesse prix.
          Fin de la citation
          Désolé, mais j'ai rien compris !
          Fin de la citation
          On fait une liste chaînée avec pointeur sur le début et un sur la fin.
          Les info sont celles données ci-haut.
          On peut insérer à un bout et effacer à l'autre.
          Je choisirais d'ajouter à la fin et de retirer au début, mais bon ...
          On parcours la lisste et on affiche celles dont le prix est supérieur à 450 000

          -
          Edité par PierrotLeFou 30 juin 2022 à 1:07:27

          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            30 juin 2022 à 1:23:24

            CheickDiakité a écrit:

            Bonsoir j'ai besoin d'aide pour résoudre un exercice sur les listes chainé.

            [...]

            Ce qui se traduit par : «je vais probablement avoir besoin d'un truc comme :

            struct node {
                struct node *next;
            
                …
                des données utiles
                …
            };

            parce qu'en général dans les exos C sur les listes chaînées on fait ainsi, on définit un nœud qui contient un lien vers un autre nœud (ou pas)»

            CheickDiakité a écrit:

            Mon énoncé me demande de crée une liste chaînée dans l'ordre FIFO 

            [...]


            Là tu devrais te dire : «tien je vais certainement avoir besoin d'un truc qui représente une liste et j'y accéderai (à travers des fonctions) avec une interface qui ressemble à des accès sur une file. Du coup quelque chose comme :

            struct queue {
                struct node *head;
                struct node *tail;
            
                …
                ptêt d'autres trucs dont tu auras besoin
                …
            };

            comme sdd et pour l'API des fonctions comme queue_new, queue_enqueue, queue_dequeue, queue_is_empty, queue_length, … cette liste n'est pas exhaustive et va dépendre des besoins que tu vas rencontrer plus tard.»

            CheickDiakité a écrit:

            [...] les infos d'une moto sont : marque couleur vitesse prix.


            Là tu te dis «ah ben tient, je sais quelles données je vais devoir manipuler et stocker dans ma file, sans doute quelque chose comme :

            struct motorbike {
                char brand[100];
                char color[100]
                double max_speed;
                unsigned long price;
            };

            »

            CheickDiakité a écrit:

            [...]  d'affiche les motos dont le prix est supérieur a 450 000f  [...]


            Il va donc falloir pouvoir parcourir ta file … plusieurs options sont disponibles ; mais commence déjà par le début.







            • Partager sur Facebook
            • Partager sur Twitter
              30 juin 2022 à 1:33:25

              Il n'est pas mentionné s'il s'agit d'une liste simplement chaînée ou doublement chaînée.
              Si c'est une liste simplement chaînée, pour rester "efficace", on n'aura pas le choix d'insérer à la fin et de supprimer (ou retirer) au début.

              Je me place dans le contexte où on a deux pointeurs comme j'ai mentionné et comme White Crow a illustré.

              -
              Edité par PierrotLeFou 30 juin 2022 à 1:52:57

              • Partager sur Facebook
              • Partager sur Twitter

              Le Tout est souvent plus grand que la somme de ses parties.

                30 juin 2022 à 2:30:02

                PierrotLeFou a écrit:

                Il n'est pas mentionné s'il s'agit d'une liste simplement chaînée ou doublement chaînée.
                [...]

                -
                Edité par PierrotLeFou il y a 26 minutes


                Ce n'est pas ça le plus important, enfin àmha.

                J'imagine que ce type d'exercice est surtout utile pour comprendre les différences d'API entre une pile (stack →push/pop), une file (queue → enqueue/dequeue) et un deque (Double Ended QUEue → prepend, append/pop, dequeue). Dans ce cadre, un chaînage simple est amplement suffisant.

                • Partager sur Facebook
                • Partager sur Twitter
                  30 juin 2022 à 7:54:50

                  Hélas, dans la plupart des cours (C pour debutants), c'est dans le mauvais sens. On explique ce qu'est un pointeur, on montre que ça peut servir à chainer, et on donne des tas d'exercices ajouter chercher enlever au debut à la fin à une position après une valeur. Et là, on s'aperçoit que ça se comporte comme des piles, des files, des listes ordonnées ou des séquences indexées.

                  Mais les fonctionnalités voulues ne sont pas posées au départ, une api bien définie qu'il faudrait ensuite implémenter.

                  Ca peut s'expliquer 

                  • Si on posait l'api au départ, pas sûr que le ďébutant choisirait d'implémenter par des chainage, alors qu'il peut certainement le faire avec des tableaux, qu'il maîtrise mieux (même problème que faire programmer des choses récursivement, après  3 mois à faire des boucles)
                  • À ce niveau d'enseignement, pile/file tout ça, c'est des notions abstraites dont ils n'ont vu aucune instance, aucun besoin dans les travaux qui leur ont été demandés. Pour parler d'un concept abstrait, c'est plus pratique si on voit à quoi le raccrocher concrètement. Ressentir une vraie utilité, ça aide a apprendre.

                  -
                  Edité par michelbillaud 30 juin 2022 à 7:57:17

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 juin 2022 à 11:22:58

                    CheickDiakité : je détaille ton plan de travail. Fais les choses dans l'ordre !

                    1) Définir les structures. Tu peux en utiliser trois : la liste (comme indiqué par White Crow), la structure moto (idem) et une structure maillon contenant une moto et un pointeur vers le maillon suivant. Ou juste deux en mettant les propriétés de la moto dans la structure maillon.

                    2) Écrire une fonction qui crée une liste : soit elle crée une liste vide, soit elle crée une liste avec un élément, je ne sais pas ce qui est le mieux (s'il y a un mieux).

                    3) Écrire une fonction qui insère un élément. Soit au début, et la suppression se fera en fin de chaîne (c'est ce que je ferais a priori), soit à la fin, et la suppression se fera en début de chaîne (proposition de Pierrot). C'est exactement pareil, il faut juste prendre une décision.

                    4) Quand tu auras inséré plusieurs éléments, écris une fonction qui affiche la liste, même si ce n'est pas demandé : c'est très utile pour déboguer.

                    5) Écrire une fonction qui supprime un élément de la liste. (Soit à la fin, soit au début, voir plus haut.)

                    6) Manipuler le programme et afficher la liste à chaque étape pour vérifier que tout se passe comme prévu.

                    Il y a pas mal de boulot...

                    -
                    Edité par robun 30 juin 2022 à 11:36:52

                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 juin 2022 à 12:13:52

                      robun a écrit:

                      CheickDiakité : je détaille ton plan de travail. Fais les choses dans l'ordre !

                      Avant tout, revoir sérieusement le cours qui va avec cet exercice, dont on ne peut pas imaginer qu'il te soit tombé du ciel sur la  tête, comme ça, par miracle.

                      Il contient certainement toutes les indications utiles sur la notion de pointeur, de structure, de chaînage, d'allocation dynamique avec quelques exemples.

                      Après ça, les exercices c'est le moyen d'intégrer tout ça, en faisant des erreurs au passage bien sûr.  C'est comme ça qu'on apprend, mais pour ça il faut les faire soi-même.

                      > Mon énoncé me demande de crée une liste chaînée dans l'ordre FIFO des moto et d'affiche les motos dont le prix est supérieur a 450 000f et les infos d'une moto sont : marque couleur vitesse prix.

                      et quel est le problème avec cet énoncé ? Un terme que tu ne comprends pas ?

                      -
                      Edité par michelbillaud 30 juin 2022 à 12:18:13

                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 juin 2022 à 13:28:11

                        robun a écrit:

                        [...]

                        2) Écrire une fonction qui crée une liste : soit elle crée une liste vide, soit elle crée une liste avec un élément, je ne sais pas ce qui est le mieux (s'il y a un mieux).

                        [...]
                        -

                        Edité par robun il y a environ 1 heure


                        Il est toujours intéressant de pouvoir créer une liste vide …
                        • Partager sur Facebook
                        • Partager sur Twitter
                          30 juin 2022 à 17:25:45

                          En C,  il est nécessaire et même indispensable d'initialiser les variables qui servent à représenter les structures de données utilisées dans les programmes.

                          Après "créer une liste", qu'est ce que ça veut dire ?  La liste est-elle représentée

                          • par une variable de type structure (initialiser les champs !),
                          • par un pointeur vers une structure (allouer la structure et en initialiser les champs !) ?
                          • ou une simple variable qui pointe vers le premier nœud (mettre ce pointeur à NULL)
                          struct Liste  liste1;
                          struct Liste *liste2;
                          struct Noeud *liste2;
                          



                          -
                          Edité par michelbillaud 16 juillet 2022 à 16:34:24

                          • Partager sur Facebook
                          • Partager sur Twitter

                          [Exercice] 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