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

  /* declaracion */
struct tpila
{
  int clave;
  struct tpila *sig;
};

  /* prototipos e implementacion */

void crear(struct tpila **pila);
int vacia(struct tpila *pila);
void apilar(struct tpila *pila, int elem);
void desapilar(struct tpila *pila, int *elem);


void crear(struct tpila **pila)
{
  *pila = (struct tpila *) malloc(sizeof(struct tpila));
  (*pila)->sig = NULL;
}

int vacia(struct tpila *pila)
{
  return (pila->sig == NULL);
}

void apilar(struct tpila *pila, int elem)
{
  struct tpila *nuevo;

  nuevo = (struct tpila *) malloc(sizeof(struct tpila));
  nuevo->clave = elem;
  nuevo->sig = pila->sig;
  pila->sig = nuevo;
}

void desapilar(struct tpila *pila, int *elem)
{
  struct tpila *aux;

  aux = pila->sig;
  *elem = aux->clave;
  pila->sig = aux->sig;
  free(aux);
}


  /* programa de prueba */
int main(void)
{
  struct tpila *pila;
  int elem;

  crear(&pila);
  if (vacia(pila)) printf("\nPila vacia!");
  apilar(pila, 1);
  desapilar(pila, &elem);

  return 0;
}