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)





Répondre avec citation





Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.






Partager