Las pilas, son todo un clásico porque no son la forma mas tradicional de agrupar datos, pero una vez que las comprendes veras que son muy muy útiles.
Tienen un nombre que muchas veces ocupan en los libros de computación, las llaman estructuras LIFO (Last In First Out) o en español: «Lo último que entra es la primero que sale».
Una pila es de verdad un buen nombre porque la estructura funciona igual que en la vida real, pues siguen sus dos principios básicos:
- Al llegar a una pila tu siempre vas al final
- Siempre se atiende al último y así sucesivamente
Así que para hacer nuestra pila, haremos algo parecido a una lista, es más, haremos algo muy parecido y más simple.
(Si no sabes que es una lista no te preocupes, no es necesario, pero te puedo adelantar que son como pilas con esteroides, capaces de hacer lo mismo que te enseñare ahora y más, así que quizá te guste echarles un vistazo después, solo digo: Lección de Listas Enlazadas).
¿Cómo que se procesa el último?
– Si, se que parece algo muy estúpido, ¿para que haría eso?
– Pues no te preocupes, te explicaré con varios ejemplos donde son útiles las pilas:
Ejemplo #1: Bolsas de Dinero
Imagínate que eres rico trabajando de programador (que divertido ¿verdad?), entonces tienes un montón de dinero que tienes que guardar, así que lo ordenas en un pila.
Entonces como los ordenaste en una pila cuando te llega tu nuevo pago del mes lo metes en la pila. Y luego cuando quieres sacar algo de tus pequeños ahorros para comprarte a última Mac, entonces sacas LA ÚLTIMA BOLSA.

Una pila…y mucho dinero
Ejemplo #2: Simplificar una expresión
Como puedes ver hay muchas situaciones donde una pila puede ser una herramienta muy útil para organizar información, pero bueno, es hora de ponernos a trabajar ¿Cómo las creamos?
¿Cómo creamos una Pila como concepto?
Antes que programar ni nada así, vamos a hablar de ideas, imagina que tienes una información que quieres guardar:
Como por ejemplo un número o una letra:
Ahora vamos por la clave, los nodos.
Nodos
Vamos a meter cada información que queramos guardar en la pila en un nodo, esto es un nodo:
El nodo tiene dos partes:
- Dato: Representa el dato a almacenar. Puede ser de cualquier tipo; en este ejemplo se trata de una lista de enteros.
- Enlace: Es un puntero al siguiente elemento de la pila; con este puntero enlazamos con el sucesor, de forma que podamos construir la lista.

Partes de un Nodo
Así una pila no es más que esto, un montón de nodos unidos.
Y si, no son mas que una versión «de prueba» de una lista enlazada, estas estructuras las puedes revisar aquí.
Funciones Básicas de una Pila
Bueno, listo estas funciones podemos ahora si ver las dos que controlan una lista:
PUSH: Apilar en la Pila
Es básicamente introducir algo en la pila, ósea podemos verlo como añadir algo al principio de la lista:
POP: Procesar una Pila
Vamos a trabajar con un elemento, procesarlo y eliminarlo, y lo vamos a hacer en el mismo sentido que en el que apilamos (en listas esto sería equivalente a eliminar el primer elemento). Esta operación se puede dividir en dos operaciones independientes:
PEEK: Consulta la Cabeza
Nos regresa, sin eliminar nada la cabeza de nuestra pila, esto s puede lograr usando un POP, y después un PUSH .
Implementación con Array
Hay otra manera, si entendiste la de arriba, esta es mucho más sencilla, vamos a usar arrays y punteros, verás que cool es:
Y es que las pilas en inglés se llaman Stack, así que vamos a usar un «Stack pointer» para convertir nuestro array en una pila:
Aquí esta la primera función:
Como ven nuestro puntero va posicionándose en un lugar libre y lo va llenando..cuando el puntero apunta fuera de nuestro «stack» decimos que paso un «stack overflow».
La segunda operación es también muy fácil de visualizar, mira:
Zona Dos: Código Real
Ok, ok, todo muy bonito hasta aquí, pero ahora es hora de ponernos a trabajar.
Esta parte sera algo, algo MUY largo, así que te recomiendo que veas el código completo y original que tengo en Github. Da click en el botón:
https://gist.github.com/SoyOscarRH/974196a8ca920f1d3ffd362f1f12f529
![]() |
![]() |
![]() |