Oui enfin c'est seulement toi que ça regarde. On n'est pas payés au nombre de topics qui passent en "résolu". D'ailleurs on n'est pas payés du tout (et je trouve qu'il y aurait peut-être une amélioration à apporter de ce côté là...:whistle:)
Oui on s'en est rendus compte
C'est très bien mais malheureusement tu t'y prends mal. Tu ne peux pas voler sans d'abord apprendre à marcher puis ensuite à courir. Et en C c'est pareil. Avant de comprendre les principes de la liste chainée, il te faut d'abord apprendre ce qu'est un pointeur et comment on s'en sert (et aussi ce qu'il ne faut pas faire avec). Parce qu'une liste chainée ce sont des maillons disséminés dans la mémoire mais où chaque maillon connait l'adresse du maillon suivant (et éventuellement du précédent si on doit la parcourir dans les deux sens). Mais pour qu'un maillon connaisse l'adresse de son suivant, ben déjà ce "suivant" doit exister au pralable (c'est ça que t'a dit foetus) et ensuite ledit maillon doit stocker cette adresse dans un pointeur et c'est pour ça qu'il te faut apprendre ce qu'est un pointeur et comment on s'en sert...
La politesse implique aussi qu'on tienne compte des messages des intervenants qui sont là pour t'aider. Donc si je te dis qu'un consensus demande qu'on fasse préfixer ses structures par "s_" et qu'en plus je te donne un exemple ça la fout mal de voir qu'ensuite tu n'en as rien à cirer...
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 #include <stdio.h> typedef struct s_noeud2 { int val; struct s_noeud2 *next; } t_noeud; int main() { t_noeud a; t_noeud b; t_noeud c; a.val=5; a.next=&b; b.val=6; b.next=&c; c.val=7; c.next=NULL; t_noeud *pt; for (pt=&a; pt != NULL; pt=pt->next) printf("valeur=%d, adresse=%04x, next=%04x\n", pt->val, pt, pt->next); }
Ca peut ensuite se dériver à un tableau de noeuds
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #include <stdio.h> typedef struct s_noeud2 { int val; struct s_noeud2 *next; } t_noeud; int main() { t_noeud tab[10]; size_t i; t_noeud *pt; for (i=0, pt=tab; i < 10; i++, pt++) { pt->val=i*i; pt->next=i < 9 ?&tab[i+1] :NULL; } for (pt=tab; pt != NULL; pt=pt->next) printf("valeur=%d, adresse=%04x, next=%04x\n", pt->val, pt, pt->next); }
C'est un peu inutile vu que pour un tableau tous les éléments se suivent en mémoire. On n'a donc plus vraiment besoin de stocker l'adresse du suivant puisque l'arithmétique des pointeurs la calcule automatiquement (et c'est d'ailleurs ce dont je me sers avec mon pt++ pour remplir le tableau) mais ça illustre...