1. #1
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    juin 2004
    Messages
    5 842
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : juin 2004
    Messages : 5 842
    Points : 11 309
    Points
    11 309

    Par défaut Les listes simplement chaînées en C

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

    Les structures de données en C.

    Première partie : les listes simplement chaînées.
    Vous pouvez laisser un commentaire sur cet article à la suite.

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    juin 2004
    Messages
    5 842
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : juin 2004
    Messages : 5 842
    Points : 11 309
    Points
    11 309

    Par défaut

    Citation Envoyé par Klodo
    Il y a peu de commentaires positifs, donc je m'y colle : super boulot ! C'est génial de trouver ce genre de tutoriels !
    Merci.

  3. #3
    Futur Membre du Club
    Inscrit en
    décembre 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : décembre 2009
    Messages : 7
    Points : 5
    Points
    5

    Par défaut

    Merci pour ce boulot, qui m'a bien aidé.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    juin 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : juin 2008
    Messages : 8
    Points : 18
    Points
    18

    Par défaut

    Il n'est pas evident de trouver de bons cours sur les listes chainees.

    Merci beaucoup a l'auteur

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    août 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : août 2007
    Messages : 7
    Points : 10
    Points
    10

    Par défaut

    Bonjour,

    Un grand merci pour ce tutoriel.

    Je me pose les questions suivantes :

    1) Pourquoi certains pointeurs ne commence pas par p_ dans les structures ? En fait il n y a que p_start qui commence par ce préfixe

    2) J'ai du mal à comprendre le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p_sll->p_start->next = p_n;
    Ne saute t on pas l’élément de type item_s créé par sll_new (p_l)

    Pour moi p_start->next signifie que p_l->next pointe sur p_n. Donc p_l->data est toujours NULL ?

    Merci d'avance.

    El_condor

  6. #6
    Inactif
    Profil pro
    Inscrit en
    novembre 2002
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2002
    Messages : 123
    Points : 123
    Points
    123

    Par défaut oui c parfait

    Oui, je trouve ce tuto très bien pour les listes chaînées.
    Les images sont bien claires, le texte est suffisant et le code est bien détaillé.
    under construction...

  7. #7
    Membre régulier Avatar de feydaykyn
    Profil pro
    Inscrit en
    septembre 2009
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2009
    Messages : 88
    Points : 121
    Points
    121

    Par défaut

    Bonjour,

    c'est un bon tutoriel mais les fonctions de suppression proposées entrainent un risque de fuite mémoire, puisque les données stockées ne sont jamais libérées. Un petit pointeur sur fonction ?

    Par ailleurs, je profiterais de la structure sll_s pour stocker la taille de la liste et un pointeur sur le dernier élement, afin d'éviter d'avoir à la parcourir en entier.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    août 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : août 2007
    Messages : 7
    Points : 10
    Points
    10

    Par défaut

    c'est un bon tutoriel mais les fonctions de suppression proposées entrainent un risque de fuite mémoire, puisque les données stockées ne sont jamais libérées. Un petit pointeur sur fonction ?
    Lorsque l'on libère un pointeur sur une chaine, ne libère t on pas tout l'ensemble ?

    Deuxième remarque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    void sll_delete (sll_s ** pp_sll)
    {
       if (pp_sll && *pp_sll)
       {
          sll_first (*pp_sll);
     
          while ((*pp_sll)->list->next != NULL)
          {
             sll_removeNext (*pp_sll);
          }
          sll_removeFirst (*pp_sll);
          free ((*pp_sll)->list);
          (*pp_sll)->list = NULL;
          free (*pp_sll), *pp_sll = NULL;
       }
    }
    Il manque une condition. En effet, si la liste vient d'être créée, alors (*pp_sll)->list->next != NULL ne peut être verifié car list = null.

    En effet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    sll_s *sll_new (void)
    {
       sll_s *p_sll = malloc (sizeof *p_sll);
    
       if (p_sll)
       {
          item_s *p_l = malloc (sizeof *p_l);
    
          if (p_l)
          {
             p_l->data = NULL;
             p_l->next = NULL;
    
             p_sll->p_start = p_l;
             p_sll->list = NULL;
          }
          else
          {
             fprintf (stderr, "Memoire insufisante\n");
             exit (EXIT_FAILURE);
          }
       }
       else
       {
          fprintf (stderr, "Memoire insufisante\n");
          exit (EXIT_FAILURE);
       }
       return p_sll;
    }
    Il faut alors rajouter la condition suivante :

    if((*pp_sll)->p_list != NULL) avant le while.

    J'en ai fait l’expérience tout à l'heure en voulant créer un répertoire.

    Cordialement

    El_condor

Discussions similaires

  1. Les listes simplement chaînées
    Par gege2061 dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 16h43
  2. [TP] Tri rapide pour liste simplement chaînée
    Par druzy dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 25/11/2007, 15h52
  3. Probleme liste simplement chaînée
    Par sorry60 dans le forum C
    Réponses: 23
    Dernier message: 19/11/2005, 20h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo