(C] liste chainée - Page 2

Précédent
  • 1
  • 2
  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  2. PIERRE
     
    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
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. w1sm3rhi11 Messages postés 372 Statut Membre 53
     
    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. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      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
      1. w1sm3rhi11 Messages postés 372 Statut Membre 53 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
         
        C'est sur, juste que je trouve ton exemple un peu alambiqué enfin si ca marche et que PIERRE comprend c'est le principal ;)
        0
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  7. w1sm3rhi11 Messages postés 372 Statut Membre 53
     
    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
  8. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  9. w1sm3rhi11 Messages postés 372 Statut Membre 53
     
    Je t'en prie :)

    Bon courage @+
    0
Précédent
  • 1
  • 2