Bonjour !
j'essaie de faire une simple liste chainée, mais apparament il y a un probleme lors du passage du pointeur d'element dans la fonction addBegin.
Je ne comprend pas, car je l ai deja fait avec des entiers... mais le pElem de la fonction main reste a NULL.
le code :
linkedList.h
linkedList.c
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 #ifndef LINKEDLIST_H #define LINKEDLIST_H #include <stdio.h> #include <stdlib.h> typedef struct{ int value; struct element *next; }element; void addBegin(element *pElem, int value); void view(element *pElem); #endif
main.c
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 #include "linkedList.h" void addBegin(element *pElem, int value) { element *pE; /* Declarer un nouvel element */ pE = malloc(sizeof(element)); /* Allocation memoire pour cet element */ pE->value = value; /* Attribution de la valeur */ pE->next = pElem; /* L' element suivant est maintenant pElem, puisque pE est le premier element*/ pElem = pE; /* Le premier element prend l'@ du nouvel element*/ } void view(element *pElem) { while(pElem != NULL) { printf("%d\n", pElem->value); pElem = pElem->next; } }
J'ai regardé ce tuto :
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 #include <stdio.h> #include <stdlib.h> #include "linkedList.h" inline int askValue() { int value; printf("Value : "); scanf("%d", &value); return value; } int main() { int choice; int value; element *pElem = NULL; /*Premier element de la liste*/ do{ printf("1:addBegin\n2:addEnd\n3:addSort\n4:view\n5:quit\nYour choice : "); scanf("%d", &choice); switch(choice) { case 1: value = askValue(); addBegin(pElem, value); printf("\n-- The value %d has been add to the begin of the list --\n\n", value); break; case 2: //...; break; case 3: //... break; case 4: view(pElem); break; } }while(choice != 5); return 0; }
http://chgi.developpez.com/pile/
Mais je prefere passer juste un pointeur au lieu d'un pointeur de pointeur... si cella est possible.
D'après moi, la ligne qui pose problème serai dans la fonction addBegin
Cette instruction ne remplirai pas son rôle, puisque pElem rest a NULL dans main()... pourtant c'est un pointeur !
Code : Sélectionner tout - Visualiser dans une fenêtre à part pElem = pE; /* Le premier element prend l'@ du nouvel element*/
Partager