Qu'es ce qui ne va pas avec cette liste chainée ?
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
Code:
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 |
linkedList.c
Code:
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;
}
} |
main.c
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 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;
} |
J'ai regardé ce tuto :
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
Code:
pElem = pE; /* Le premier element prend l'@ du nouvel element*/
Cette instruction ne remplirai pas son rôle, puisque pElem rest a NULL dans main()... pourtant c'est un pointeur !