a continuacion se da un ejemplo de pila con las plantillas(template de c++):
#include <iostream.h>
#include<conio.h>
#include<stdio.h>
class nodo {
public:
nodo(int v, nodo *sig = null)
{
valor = v;
siguiente = sig;
}
private:
int valor;
nodo *siguiente;
friend class pila;
};
typedef nodo *pnodo;
class pila {
public:
pila() : ultimo(null) {}
~pila();
void push(int v);
int pop();
private:
pnodo ultimo;
};
pila::~pila()
{
pnodo aux;
while(ultimo) {
aux = ultimo;
ultimo = ultimo->siguiente;
delete aux;
}
}
void pila::push(int v)
{
pnodo nuevo;
/* crear un nodo nuevo */
nuevo = new nodo(v, ultimo);
/* ahora, el comienzo de nuestra pila es en nuevo nodo */
ultimo = nuevo;
}
int pila::pop()
{
pnodo nodo; /* variable auxiliar para manipular nodo */
int v; /* variable auxiliar para retorno */
if(!ultimo) return 0; /* si no hay nodos en la pila retornamos 0 */
/* nodo apunta al primer elemento de la pila */
nodo = ultimo;
/* asignamos a pila toda la pila menos el primer elemento */
ultimo = nodo->siguiente;
/* guardamos el valor de retorno */
v = nodo->valor;
/* borrar el nodo */
delete nodo;
return v;
}
int main()
{
pila pila;
pila.push(20);
cout << "push(20)" << endl;
pila.push(10);
cout << "push(10)" << endl;
cout << "pop() = " << pila.pop() << endl;
pila.push(40);
cout << "push(40)" << endl;
pila.push(30);
cout << "push(30)" << endl;
cout << "pop() = " << pila.pop() << endl;
cout << "pop() = " << pila.pop() << endl;
pila.push(90);
cout << "push(90)" << endl;
cout << "pop() = " << pila.pop() << endl;
cout << "pop() = " << pila.pop() << endl;
cin.get();
return 0;
}
//fin del programa
con lo cual imprime:
push(20)//meto 20
push(10)//meto 10
pop()=10//saco 10 porque esta en la cabeza
push(40)//meto 40
push(30)//meto 30
pop()=30//saco 30 porque ahora esta en la cabeza
pop()=40//saco 40 porque abajo de 30 estaba el 40
push(90)//meto 90
pop()=90//saco 90
pop()=20//saco el 20 que estaba hasta abajo
en lo cual observamos un comportamiento lifo(pila).