#include<stdio.h>
#include<stdlib.h>

typedef struct m{
  char valeur;
  struct m* suivant;
} maillon;

int empty(maillon* p_liste){
  if (p_liste){
    return 1;
  }
  return 0;
}

void push(maillon** p_pile, char new_valeur){
  maillon* new_maillon = (maillon*) malloc(sizeof(maillon));
  new_maillon->valeur = new_valeur;
  new_maillon->suivant = *p_pile;
  *p_pile = new_maillon;
}

char pop(maillon** p_pile){
  char valeur= (*p_pile)->valeur;
  maillon* p_suivant=(*p_pile)->suivant;
  free(*p_pile);
  *p_pile=p_suivant;
  return valeur;
}

char top(maillon* p_pile){
  return p_pile->valeur;
}

void clear(maillon** p_pile){
  maillon* p_suivant = *p_pile;
  while(p_suivant!=NULL){
    p_suivant = (*p_pile)->suivant;
    free(*p_pile);
    *p_pile = p_suivant;
  }
}

int main(void){
  int choix=99;
  char caractere;
  maillon* p_pile=NULL;
  printf("\n----------instruction----------\n1<char>- push\n2- pop\n3- top\n4- clear\n5- quit\n----------------------------------\n");
  while(choix!=5){
    printf("choix : ");
    scanf("%d%c",&choix,&caractere);
    if (choix==1){
      push(&p_pile,caractere);
    }
    if (choix==2){
      if (empty(p_pile)){
	printf("resultat : %c\n",pop(&p_pile));
      }
    }
    if (choix==3){
      if (empty(p_pile)){
	printf("resultat : %c\n",top(p_pile));
      }
    }
    if (choix==4){
      clear(&p_pile);
      printf("La liste à bien été vidé\n");
    }
  }
  printf("O revoir BG\n");
  return 0;
}
