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 :

Explication sur les listes chainées


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Points : 49
    Points
    49
    Par défaut Explication sur les listes chainées
    Bonjour,j'ai trouvé un paragraphe d'explications sur les listes chainées,cependant je n'arrive pas à modéliser le fonctionnement dans ma tête,notamment pour l'ajout d'un premier élément.

    Voici le paragraphe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Ajout d'un premier élément
    
    Une fois la structure et les pointeurs définis, il est possible d'ajouter un premier maillon à la liste chaînée, puis de l'affecter au pointeur Tete. Pour cela il est nécessaire :
    
    d'allouer la mémoire nécessaire au nouveau maillon grâce à la fonction malloc, selon la syntaxe suivante :
    Nouveau = (Liste*)malloc(sizeof(struct Liste));
    d'assigner au champ « pointeur » du nouveau maillon, la valeur du pointeur vers le maillon de tête :
    Nouveau->pSuivant = Tete;
    définir le nouveau maillon comme maillon de tête :
    Tete = Nouveau;
    L'allocation dynamique de mémoire je la comprends,ce que je n'arrive pas à comprendre c'est pourquoi par exemple on doit faire pointer le nouveau maillon vers le maillon de tête et pourquoi ensuite on fait Tete=Nouveau ?

    Si une personne arrivait à me l'expliquer avec un petit schéma ou avec des termes plus faciles ce serait super.Merci beaucoup !

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Salut

    Tu peux trouver un cours de listes chainées ici : http://chgi.developpez.com/pile/

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Rien de tel qu'un petit échange.
    Le principe d'une liste chainée simple est qu'un élément de la liste possède au moins 2 valeurs
    1- l'information sur l'élément lui-même
    2- un pointeur sur l'élément suivant.
    L'information sur l'élément lui-même peut être n'importe quoi, par exemple un pointeur sur une structure qui décrit l'élément.
    L'élément suivant est forcément du type "élément". S'il n'y a pas de suivant, parce que c'est le dernier et UNIQUEMENT dans ce cas là, le pointeur est NULL.

    Lorsqu'on insère le premier élément dans la liste, le pointeur "suiv" est mis à NULL. A partir de ce moment quel est le premier élément ?, c'est à dire quel est celui qui servira à parcourir la liste depuis de début, justement celui qu'on vient de créer, donc, on le mémorise soigneusement.

    Il faut savoir qu'une liste peut être parcourue dans le sens où on a inséré les différents éléments, ou dans le sens inverse Dans le cas que vous décrivez, la liste sera parcourue dans le même sens que vous l'avez créée. Mais on peut aussi la parcourir dans le sens inverse. Dans ce cas, le premier élément à conserver pour parcourir la liste est le dernier inséré. Mais gardez ce paragraphe pour plus tard.

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Si une personne arrivait à me l'expliquer avec un petit schéma
    Voici un schéma expliquant au fur et à mesure de l'exécution du code la situation en mémoire (j'ai numéroté les éléments pour bien les différencier) :
    Au départ, la liste est vide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct Liste * Tete --> NULL
    insertion du premier élément :
    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
    Nouveau = malloc(sizeof(struct Liste))
          Tete --> NULL
                    ----------
                   | psuivant |--> ???
       Nouveau --> |  ..1..   |
                    ----------
    
    Nouveau->pSuivant = Tete;
           Tete -->NULL
                    ----------
                   | psuivant |--> NULL
       Nouveau --> |  ..1..   |
                    ----------
    
    Tete = Nouveau;
                    ----------
           Tete -->| psuivant |--> NULL
                   |  ..1..   |
                    ----------
    Insertion du suivant:

    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
    Nouveau = malloc(sizeof(struct Liste));
                    ----------
           Tete -->| psuivant |--> NULL
                   |  ..1..   |
                    ----------
                    ----------
                   | psuivant |--> ???
       Nouveau --> |  ..2..   |
                    ----------
    
    Nouveau->pSuivant = Tete;
                    ----------
           Tete -->| psuivant |--> NULL
                   |  ..1..   |<-
                    ----------   |
                    ----------   |
                   | psuivant |--
       Nouveau --> |  ..2..   | 
                    ----------
    
    Tete = Nouveau;
                    ----------
                   | psuivant |--> NULL
                   |  ..1..   |<-
                    ----------   |
                    ----------   |
                   | psuivant |--
          Tete --> |  ..2..   | 
                    ----------
    etc...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 291
    Points : 49
    Points
    49
    Par défaut
    Merci beaucoup !

  6. #6
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 078
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 078
    Points : 2 338
    Points
    2 338
    Par défaut
    Comme quoi l'ASCII art permet de faire des merveilles.

  7. #7
    Invité
    Invité(e)
    Par défaut
    En choisissant bien sa table de caractère aussi.
    Images attachées Images attachées  

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. fonctions sur les Listes chainées
    Par rototo1 dans le forum C
    Réponses: 7
    Dernier message: 31/01/2013, 18h47
  2. Besoin d'aide pour mon script sur les listes chainées
    Par narama87 dans le forum Débuter
    Réponses: 1
    Dernier message: 13/01/2011, 12h29
  3. Question sur les listes chainées.
    Par deubelte dans le forum C++
    Réponses: 15
    Dernier message: 18/03/2010, 13h29
  4. projet ou exercices sur les listes chainées
    Par petite_developpeuse dans le forum C
    Réponses: 1
    Dernier message: 12/12/2008, 17h07
  5. des questions sur les listes chainées
    Par hunter99 dans le forum C
    Réponses: 13
    Dernier message: 05/12/2006, 22h51

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