Para los que esteis estudiando listas enlazadas sabreis que las pilas son un tipo concreto: LIFO (Last In, First Out). Al caso, no voy a explicarlas, sólo voy a dejar un ejemplo que he desarrollado yo mismo con comentarios explicativos.
:)
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
typedef struct pila
{
int clave;
struct pila *psig;
}pila;
pila *pmaestro;
/*Declaración de funciones*/
pila *NuevoElem();
void push(int dato);
int pop(void);
void imprimir(pila *);
/*Fin de las declaraciones*/
/*******************************FUNCION MAIN*****************************/
main()
{
char m;
int k;
puts("Anadir un elemento [A], borrar el ultimo elemento [B], listar todo [L] o salir [S]: "); while(1){
printf("[A], [B], [L] o [S]: ");
switch(m){
case 'B': pop(); break;
case 'L': imprimir(pmaestro); break;
default: puts("\nSaliendo del programa...");
return 0;
}
}
}
/**************************************************************************/
void push(int dato) /*Añade un nuevo elemento a la pila*/
{ pila *q = NuevoElem();
q->psig = pmaestro;
q->clave = dato;
pmaestro = q;
}
int pop(void) /*Esta función "desecha" el último elemento introducido*/
{ pila *q; int x;
if (pmaestro
==NULL
) { puts("Lista vac¡a"); return EOF
; } else{
x = pmaestro->clave;
q = pmaestro;
pmaestro = pmaestro->psig;
return x;
}}
pila *NuevoElem() /*Crea un nuevo elemento. Atento: retorna un puntero*/
{ pila
*q
= (pila
*)malloc(sizeof(pila
)); return q;
}
void imprimir(pila *pmaestro) /*Imprime todos los datos albergados en la pila hasta el momento*/
{
printf("Las claves introducidas son: "); while(pmaestro!=NULL)
{
printf("%d ", pmaestro
->clave
); pmaestro = pmaestro->psig;
}
}