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 : 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
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
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 : 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;
}
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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !