Un stack, también conocido como pila, es una estructura de datos que almacena elementos de forma lineal siguiendo una arquitectura de tipo LIFO (Last In – First Out) en lugar de una arquitectura de tipo FIFO. Que utilice una arquitectura de tipo LIFO significa que el último elemento en entrar en el stack es el primero en salir. De este modo, un stack va a trabajar principalmente a través de dos operaciones clave: push y pop.
Al utilizar una arquitectura LIFO, imaginemos al stack como un cubo en el que vamos introduciendo discos. A medida que añadimos discos al cubo estos se van apilando uno encima del otro. Esto implica que el último elemento en ser añadido se va a encontrar siempre en la cima del cubo. A su vez, en caso de querer desapilar los discos del cubo, tendremos que empezar a quitar los discos desde la cima. Por tanto, con este ejemplo vemos claramente cómo funciona un stack, donde tanto la función push (añadir) como la función pop (eliminar) van a actuar siempre sobre el elemento de la cima de la pila.
Además de las funciones push y pop, otras de las tareas que podrá realizar un stack son:
- Ojear: devuelve el valor de la cima de la pila sin eliminarlo.
- Duplicar: copia el valor de la cima de la pila en otra variable sin eliminarlo.
- Intercambiar: hace un swap de los dos primeros valores de la pila.
- Rotar: desplaza una posición hacia arriba o hacia abajo todos los elementos del stack.
A la hora de implementar un stack, se podrá utilizar tanto un array como una lista enlazada. El elegir una opción u otra será decisión del desarrollador del programa. No obstante, una lista enlazada será siempre más recomendable debido a que el tamaño de un stack suele ser dinámico.

Para seguir aprendiendo…
SwiftByCoding: Estructuras de Datos – Pila
EcuRed: Pila (Estructura de datos)
ProgrammerClick: Estructura de datos JS-stack