/* -------------------------------------------------- */
/* Implementación de una pila mediante lista enlazada */
/* ------ http://www.lawebdelprogramador.com -------- */
/* -------------------------------------------------- */
#include <stdio.h>
#include <stdlib.h>
/* declaracion de la pila*/
struct tipo_pila
{
int clave;
struct tipo_pila *sig;
};
/* Cabeceras de prototipos de funciones */
void crear_pila(struct tipo_pila **pila);
int es_vacia(struct tipo_pila *pila);
void apilar_pila(struct tipo_pila *pila, int elem);
void desapilar_pila(struct tipo_pila *pila, int *elem);
void crear_pila(struct tipo_pila **pila)
{
*pila=(struct tipo_pila *) malloc(sizeof(struct tipo_pila));
(*pila)->sig=NULL;
}
void apilar_pila(struct tipo_pila *pila, int elem)
{
struct tipo_pila *nuevo;
nuevo=(struct tipo_pila *) malloc(sizeof(struct tipo_pila));
nuevo->clave=elem;
nuevo->sig=pila->sig;
pila->sig=nuevo;
}
void desapilar_pila(struct tipo_pila *pila, int *elem)
{
struct tipo_pila *aux;
aux=pila->sig;
*elem=aux->clave;
pila->sig=aux->sig;
free(aux);
}
int es_vacia(struct tipo_pila *pila)
{
return (pila->sig==NULL);
}
/* programa principal */
main(void)
{
struct tipo_pila *pila;
int elem;
crear_pila(&pila);
if (es_vacia(pila)) printf("\nPila vacia!");
apilar_pila(pila, 1);
desapilar_pila(pila, &elem);
}
Se crea una estructura con un entero clave y un apuntador a estructura siguiente.
{Pre}={Existe estructura tipo_pila pila}
void crear(struct tipo_pila **pila)
{Post}={Se ha creado la pila apuntadora a NULL}
{Pre}={Existe elemento pila, elem tiene valor}
void apilar_pila(struct tipo_pila *pila, int elem)
{Post}={pila=pila+elemento añadido}
{Pre}={Existe elemento pila, existe elem}
void desapilar_pila(struct tipo_pila *pila, int *elem)
{Post}={pila=pila-ultimo valor añadido y elem apunta al valor descargado de la pila}
{Pre}={Existe pila}
void es_vacia(struct tipo_pila *pila)
{Post}={Cierto si la pila está vacía. Falso por lo contrario}