Te paso una pila básica codificada en C. Espero que te sirva.
Código (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <locale.h>
typedef struct tpila {
int dato;
struct tpila *siguiente;
} pila;
pila* pila_new() {
return NULL;
}
bool pila_push(pila **top, int dato) {
bool retValue = false;
pila *nodo = malloc(sizeof(pila));
if(!nodo)
goto final_pila_push;
nodo->dato = dato;
nodo->siguiente = *top;
*top = nodo;
retValue = true;
final_pila_push:
return retValue;
}
bool pila_pop(pila **top, int *dato) {
bool retValue = false;
pila *nodo = *top;
if(!nodo)
goto final_pila_pop;
*dato = nodo->dato;
*top = nodo->siguiente;
free(nodo);
retValue = true;
final_pila_pop:
return retValue;
}
bool pila_top(pila ** const top, int *dato) {
bool retValue = false;
if(!*top)
goto final_pila_top;
*dato = (*top)->dato;
retValue = true;
final_pila_top:
return retValue;
}
void pila_free(pila **top) {
pila *nodo;
while(*top) {
nodo = *top;
*top = nodo->siguiente;
free(nodo);
}
}
int main() {
int n;
pila *p = pila_new();
setlocale(LC_ALL, "spanish");
pila_push(&p, 5);
pila_push(&p, 2);
pila_push(&p, 3);
pila_top(&p, &n);
printf("En la pila está el valor %d\n", n);
pila_pop(&p, &n);
printf("Se saca de la pila el valor %d\n", n);
pila_pop(&p, &n);
printf("Se saca de la pila el valor %d\n", n);
pila_free(&p);
}