bonjour à tous, je m'exerce en ce moment sur les listes chaînées mais j'ai un problème et je n'arrive pas à le localiser. Quand je veux afficher ma liste, j'obtiens seulement la première et dernière valeur insérée, pouvez vous me donner des pistes ? voici le code.
merci à vous.
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104 #include <stdio.h> #include <stdlib.h> struct elem{ int val; struct elem *suiv; struct elem *prec; }; struct pointeur { struct elem *der; struct elem *prem; int taille; }; void init(struct pointeur *p); struct pointeur* ajouDeb(struct pointeur *p, int val); struct pointeur* ajouFin(struct pointeur *p, int val); void affiche(struct pointeur *p); int main(void) { struct pointeur *maListe = malloc(sizeof(struct pointeur)); init(maListe); int i; for(i = 0; i <= 5; i++) maListe = ajouFin(maListe, i); affiche(maListe); return 0; } void init(struct pointeur *p) { p->der = NULL; p->prem = NULL; p->taille = 0; } struct pointeur* ajouDeb(struct pointeur *p, int val) { struct elem *nouv = malloc(sizeof(struct elem)); if(!nouv) exit(-1); nouv->val = val; nouv->suiv = p->prem; nouv->prec = NULL; if(p->prem != NULL) { p->prem->prec = nouv; } else { p->prem = nouv; p->der = nouv; } p->taille++; return p; } struct pointeur* ajouFin(struct pointeur *p, int val) { struct elem *nouv = NULL; nouv = malloc(sizeof(struct elem)); if(!nouv){ exit(-1); } nouv->val = val; nouv->suiv = NULL; nouv->prec = p->der; if(p->der) { p->der->suiv = nouv; } else { p->prem = nouv; p->der = nouv; } p->taille++; return p; } void affiche(struct pointeur* p) { struct elem* tmp = p->prem; while(tmp) { printf("valeur = %d ", tmp->val); tmp = tmp->suiv; } }
Partager