ça fait longtemps que j'ai pas fais de C, et je voudrais avoir un exemple de liste chaînée autre que celui déjà proposé dans le tutoriel!
Merci d'avance.
Version imprimable
ça fait longtemps que j'ai pas fais de C, et je voudrais avoir un exemple de liste chaînée autre que celui déjà proposé dans le tutoriel!
Merci d'avance.
Il y a au moins deux tutoriaux sur les listes chaînées sur developpez.com:
http://nicolasj.developpez.com/articles/listesimple/
http://chgi.developpez.com/pile/
Lequel as-tu déjà lu?
Thierry
J'avais lus les deux, mais je voulais encore un autre exemple.
je ne vois pa la difference entre sa:
et saCode:
1
2
3
4
5
6 typedef struct sll { item_s *p_start; item_s *list; } sll_s;
Code:
1
2
3
4
5 typedef struct sll { item_s *p_start; item_s *list; };
Le 1er bout de code définit un alias de type appelé sll_s, tandis que le deuxième ne définit aucun type. (je me demande même s'il s'agit d'une syntaxe valide d'un typedef?)
Thierry
En supposant que item_s est défini quelque part avant, le deuxième exemple est faux. Il manque le nom du typedef. Dans les deux cas, le tag 'sll' n'est pas utilisé.Citation:
Envoyé par poche
Donc si je fais une liste chainée, j'utilise juste la première structure?
Et sinon peux tu m'envoyer un autre petit bout de prog. pour que je comprenne mieux STP?
Merci d'avance
Je ne comprends pas très bien ton problème. Tu connais les structures, les pointeurs, l'allocation dynamique, le principe du chainage, les fonctions, les paramètres ?Citation:
Envoyé par poche
Que veux tu de plus, du code tout fait ? Ben non. C'est à toi de réfléchir.
Commence par des choses simples.
écrit une fonction qui ajoute un élément à cette liste (list_add) et une autre qui affiche le contenu de la liste (list_display) . Complète le main().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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 /* élément (noeud) d'une liste chainée d'int */ struct node { /* données */ int data; /* chainage */ struct node *p_next; }; struct list { /* premier élément */ struct node *p_head; /* dernier élément */ struct node *p_tail; }; ??? list_add (???) { ??? } ??? list_display (???) { ??? } int main (void) { struct list list = {NULL, NULL}; list_add (???, 123); list_add (???, 456); list_display (???); return 0; }
C'est peut-être un détail d'implantation, mais il est fort probable que list_add() utilisera allouera l'espace pour chaque nouveau noeud de manière dynamique. Je verrais bien encore un fonction:Citation:
Envoyé par Emmanuel Delahaye
destinée à faire le ménage. La structure de main deviendrait alors:Code:
1
2
3
4 ??? list_distroy(???) { ??? }
iThierryCode:
1
2
3
4
5
6
7
8
9
10
11 nt main (void) { struct list list = {NULL, NULL}; list_add (???, 123); list_add (???, 456); list_display (???); list_distroy(???); return 0; }
list_destroy()...Citation:
Envoyé par mujigka
Je suis bien d'accord, mais mon petit doigt me dit qu'on va déjà du mal à avoir les 2 premières fonctions... Je ne voulais pas assommer le débutant dès le premier post...
Il y a des aspects fonctionnels et il y a des aspects pédagogiques...
Ma petite expérience dans ce dernier domaine m'a montré qu'il fallait y aller 'tranquillou' pour reprendre l'expression d'un de mes élèves...
c'est quoi la différence entre :
typedef struct item
{
struct item *next;
void *data;
}item_s;
et
struc sll
{
item_s *p_start;
item_s *liste;
};
Dans le 1er cas, on déclare une structure et un alias de type. Dans le 2ème cas, on se contente de déclarer une structure. Le type item_s ou struct item définit la représentation en mémoire d'un noeud de la liste chaînée, tandis que le type struct sll définit la liste elle-même.Citation:
Envoyé par poche
En ce qui concerne l'implantation de la liste chaînée proprement dit, il convient de rester proche de l'exemple donné dans le tutoriel http://nicolasj.developpez.com/articles/listesimple/ car il existe plusieurs manières de s'y prendre. Dis-nous précisément ce que tu ne comprends pas dans le tuto de Nicolas Joseph...
Thierry
Déjà répondu.Citation:
Envoyé par poche
J'ai déposé une source ici si ca pourrait t'interesser.