#include"pile.h"
#include<stdlib.h>

struct pile{
        void * val;
        Pile next;
};

Pile new_cell(void *val, Pile next){
  Pile p=(Pile)malloc(sizeof(struct pile));
  p->val = val;
  p->next = next;
  return p;
}

Pile init(){
  return new_cell(NULL, NULL);
}

void push(Pile p, void* val){
  p->next=new_cell(val, p->next);
}

void* pop(Pile p){
  void *val;
  Pile n;
  n=p->next;
  if (!n) return NULL;
  val=n->val;
  p->next=n->next;
  free(n);
  return val;
}

int is_empty(Pile p){
  return !p->next;
}
