apl/APL1.2/fichier/pile.c
unknown d9949b5cb0 a
2022-01-14 06:54:18 +01:00

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;
}