(C] liste chainée - Page 2

  1. Modérateur
    courant->suivant = supp_element->suivant; si j'ai bien compris ?
    Non.
    supp_element c'est un pointeur que j'utilise pour avoir une référence vers l'élément que je doit supprimer
    ça me permettre de faire free() sur supp_element

    donc à eviter cette interpretation, même si ça pourrait être valable

    je fait courant->suivant = courant->suivant->suivant justement pour montrer l'enchaînement ;-)

    0
    1. De plus, tu utilise souvant :

      typedef struct ElementListe
      {
      char *donnee;
      struct ElementListe *suivant;
      } Element;
      Element *elem ;
      ... /* du code */
      elem->suivant->suivant

      peut se remplacer par si je suis là logique :

      typedef struct ElementListe *PElement ;
      typedef struct ElementListe
      {
      char *donnee;
      PElement suivant;
      } Element;
      PElement elem ;
      elem->suivant-suivant

      ? Element *elem ~= PElement elem reviens a la même :s normalement
      0
      1. Modérateur
        Salut,

        typedef struct ElementListe *PElement ;
        typedef struct ElementListe
        {
        char *donnee;
        PElement suivant;
        } Element;
        PElement elem ;


        PElement c'est un pointeur du type ElementListe* , ce qui te permettra de definir le pointeur suivant dans la structure Element
        En revanche elem c'est un pointeur de type Element*
        donc il faut declaré
        typedef struct ElementListe *PElement ;
        typedef struct ElementListe
        {
        char *donnee;
        PElement suivant;
        } Element;
        Element elem ; 
        --
        lami20j
        0
        1. typedef struct ElementListe *PElement ;
          typedef struct ElementListe
          {
          char *donnee;
          PElement suivant;
          } Element;
          PElement elem ;


          marche tout aussi bien ;)

          Il suffira alors d'utiliser elem->suivant pour pointer sur l'élément suivant de la liste :)
          0
          1. Modérateur
            Oui, biensûr.
            Pourquoi faire un typedef si on ne l'utilise pas

            typedef struct ElementListe{
              
            }Element;


            en plus c'est plus clair de dire qu'on crée un élément de la liste
            ça reviens en fait à une histoire d'alias, le principe reste le même

            faire un alias d'un alias ce n'est pas très top :-))
            0
          2. @lami20jC'est sur, juste que je trouve ton exemple un peu alambiqué enfin si ca marche et que PIERRE comprend c'est le principal ;)
            0
        2. Modérateur
          et que PIERRE comprend c'est le principal ;)
          D'accord avec toi, c'est ça mon but ;-)
          Et voici sa réponse
          D'accord merci, je viens de teste ton code est tout est bcp plus clair.

          juste que je trouve ton exemple un peu alambiqué

          Ben, justement il n'est pas alambique (ce qui ne vas changer pas ton avis ;-)
          Au contraire j'ai crée le code dans le but didactic pour comprendre les opérations sur les listes chaînées.
          Et je l'ai fait puisque à vrai dire je n'ai pas vu encore une présentation basique à la portée pour tout débutant.
          Chaque fonction pourra être étudier sans se soucier d'une autre.
          Si un structuration des opérations ne te semble pas organisée alors je suis désolé.

          C'est loin d'être une bonne implementation.
          Une impléméntation se fait en fonction des besoins.

          Bref, je le trouve plûtot organisé, quoi que assez long, ce qui est d'ailleurs normal vu que pour chaque opération j'ai crée une fonction.

          Je pense que c'est essentiel de comprendre le principe et ensuite de comprendre les opérations qu'on peut effectuer sur une liste

          - sauvegarder le début et la fin de la liste pour garder le contrôle
          - incrementation ou decrementation de la taille en fonction des opérations d'insertion ou suppression
          - allocation de la mémoire pour le nouveau élément
          - insertion dans une liste vide
          - insertion au début
          - insertion à la fin
          - insertion ailleurs dans la liste
          - suppression au début
          - suppression à la fin
          - suppression ailleurs dans la liste
          - affichage de la liste
          - detruire la liste

          J'ai fait aussi une représentation pour chaque opérations pour être encore plus clair.

          On pourrait écrire une seule fonction qui groupe les opérations d'insertion ainsi qu'une seule fonction qui groupe les opérations de suppression (voir Maîtrise des algorithmes en C)

          0
          1. Pour ma compréhension ca ira ^^ j'ai largement utilisé les listes chaînées et créé certaines du genre hétérogène ou des trucs comme ca.

            Ce que je voulais dire est simplement que je trouvais la structure de la liste un peu compliquée pour les débutants qui se lancent la dedans.
            Apparemment j'ai eu tort ^^ en tout cas vu que c'est toi qui a fait ca c'est du beau travail :)
            0
            1. Modérateur
              que je trouvais la structure de la liste un peu compliquée pour les débutants qui se lancent la dedans.
              je vais tenir compte de ton opinion ;-) et je vais essayer de modifier.
              Merci ;-)
              0
              Précédent
              • 1
              • 2