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 : 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
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
Dans les deux fonctions on déclare un pointeur sur node et on lui affecte la liste pour la parcourir.
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 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 add_end on a ainsi
et dans display on a
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; ....
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
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
(j'ai juste du mal avec les files)
Partager