IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Les listes simplement chaînées en C [Tutoriel]


Sujet :

C

  1. #1
    Rédacteur

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

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    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 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    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 : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Points : 11
    Points
    11
    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 : 130
    Points
    130
    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
    Invité
    Invité(e)
    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 : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 7
    Points : 11
    Points
    11
    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