57 lines
1.7 KiB
C
57 lines
1.7 KiB
C
#include<stdio.h>
|
|
#include<stdlib.h>
|
|
#include<string.h>
|
|
|
|
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;
|
|
} |