difficulté avec les listes chainées
bonsoir
Je suis actuellement en phase d'apprentissage des listes chainées. Pour cela j'utilise le site d'Emmanuel Delahaye .
http://emmanuel-delahaye.developpez....s_chainees.htm
Je fais un petit blocage sur les fonctions de bases que sont affichages de la liste et ajout d'un element en fin de liste.
ajout en fin
Code:
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 30 31 32 33 34 35 36 37 38 39 40
|
struct node *add_end (struct node *p_head, int value)
{
/* allocation du noeud */
struct node *p_new = malloc (sizeof *p_new);
/* si tout s'est bien passe : */
if (p_new != NULL)
{
/* mise a jour des champs : */
/* donnees */
p_new->x = value;
/* chainage par defaut */
p_new->p_next = NULL;
/* chainage */
if (p_head == NULL)
{
/* c'est le premier : */
p_head = p_new;
}
else
{
/* on cherche le dernier noeud */
struct node *p = p_head;
while (p->p_next != NULL)
{
/* pointer sur le suivant */
p = p->p_next;
}
/* modification du chainage */
p->p_next = p_new;
}
}
return p_head;
} |
affichage
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
void display (struct node *p_head)
{
struct node *p = p_head;
while (p != NULL)
{
/* afficher les données courantes */
printf ("%d > ", p->x);
/* pointer sur le suivant */
p = p->p_next;
}
/* afficher la fin */
printf ("NIL\n");
} |
Dans les deux fonctions on déclare un pointeur sur node et on lui affecte la liste pour la parcourir.
Dans add_end on a ainsi
Code:
1 2 3 4 5 6 7 8
|
struct node *p = p_head;
while (p->p_next != NULL)
{
/* pointer sur le suivant */
p = p->p_next;
.... |
et dans display on a
Code:
1 2 3 4 5 6 7 8 9 10
|
struct node *p = p_head;
while (p != NULL)
{
/* afficher les données courantes */
printf ("%d > ", p->x);
/* pointer sur le suivant */
p = p->p_next; |
La création du pointeur p est identique dans les deux fonctions mais la condition de parcours dans le while est différentes :s. Et je ne comprend pas trop pourquoi.
Ensuite dans add_end on renvoie la liste passé en paramètre. hors dans le code on affecte au pointeur p la liste passée au paramètre puis on ajoute le nouvel élément au pointeur p. La fonction se termine avec le renvoie en valeur de la sortie du pointeur p_head. Comment le nouvel élément est affecté à la liste p_head ? Puisque celui-ci est rajouté au pointeur temporaire p :s.
Je ne sais aps si je suis clair.
En tout cas félicitation à l'auteur du site il est trés clair :yaisse2:
(j'ai juste du mal avec les files :D)