Citation Envoyé par je viens du sud Voir le message
ce topic restera ouvert durant un ans sans être marqué résolu
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à...)

Citation Envoyé par je viens du sud Voir le message
je suis novice en C
Oui on s'en est rendus compte

Citation Envoyé par je viens du sud Voir le message
et je cherche à comprendre
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...

Citation Envoyé par je viens du sud Voir le message
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
struct noeud2
{
  int a;
  struct noeud2* b;
};
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...

Citation Envoyé par je viens du sud Voir le message
monSD.a = 5; // ca marche
(monSD.b)->a=6; // ca marche pas
Code c : 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
#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 c : 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
#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...