#include #include #include typedef struct mail{ char valeur; struct mail* suivant; }maillon; typedef maillon* pile; void push(pile *p, char valeur){ maillon* nouveauMaillon=(maillon*) malloc(sizeof(maillon)); /*Creation du nouveau maillon*/ nouveauMaillon->valeur=valeur;/*On affecte la valeur au nouveau maillon*/ nouveauMaillon->suivant=*p;/*p etant un pointeur sur une pile etant elle meme un pointeur sur le premier element de la pile, le nouveau maillon pointe donc sur celui pointé par p*/ *p=nouveauMaillon;/*p doit pointer sur le nouveau dernier maillon*/ } char pop(pile *p){ maillon sauvegardeDernierMaillon=**p;/*On fait une copie du dernier maillon de la pile actuel*/ free(*p);/*On supprime le dernier maillon de la pile */ *p=sauvegardeDernierMaillon.suivant;/*Le pointeur de la pile doit maintenant pointer sur l'ex avant dernier maillon car ce dernier devient le nouveau dernier maillon*/ return sauvegardeDernierMaillon.valeur;/*On retourne la valeur de l'ex dernier maillon qui a été supprimé*/ } int empty(pile *p){ if(*p==NULL){/*Si le pointeur de debut de pile pointe sur NULL, la pile est vide*/ return 0; }else return 1; } int main(void){ pile p=NULL;/*IL FAUT INITIALISER LE POINTEUR DE PILE A NULL*/ char ordre[3]=" \0"; printf("La pile attends vos ordres "); while(ordre[0]!='q'){ printf("\n> "); scanf("%s",ordre); switch(ordre[0]){ case '+': push(&p,ordre[1]); printf("Le caractere %c a été ajouté",ordre[1]); break; case '-': if(empty(&p)){ printf("Le caractere %c a été supprimé",pop(&p)); }else printf("La pile est vide !\n"); break; } } printf("Aurevoir\n"); return EXIT_SUCCESS; }