Una pila es una estructura de datos que se accede en modo LIFO (煤ltimo en entrar, primero en salir).
Imagina una pila de libros de la que solo puedes tomar el libro de la parte superior, y en la que solo puedes ubicar libros encima de los dem谩s.
La torre de hanoi es un cl谩sico juego que funciona con 3 pilas y discos de diferentes tama帽os. Los discos se organizan de mayor a menor tama帽o en un cilindro y el objetivo es moverlos a otra pila en el mismo orden siguiendo tres reglas:
- Solo puedes mover un disco a la vez.
- Un disco solo se puede mover si se encuentra en la parte superior de una de las pilas.
- Ning煤n disco disco se puede ubicar encima de otro de menor tama帽o.
Las pilas se usan en programaci贸n para recordar tareas y deshacer cambios.
El ejemplo m谩s claro es el del bot贸n Deshacer (Undo). Cada acci贸n que realizas en tu computador se almacena en una pila. Cada vez que oprimes Deshacer, el sistema operativo toma la 煤ltima acci贸n y la deshace.
Otro ejemplo es el llamado de m茅todos o funciones en la ejecuci贸n de un programa. Cuando un m茅todo se invoca, se agrega a una pila. Cuando retorna, se retira de la pila, y se le devuelve el control al m茅todo que lo llam贸. Es por eso que a la lista de m茅todos que se imprime cuando ocure un error se le llama stack trace.
Una pila tiene dos m茅todos b谩sicos: apilar (push) y retirar (pop). Esta es una implementaci贸n muy simple de una pila que se usa de la siguiente forma:
s1 = Stack.new
s1.push(3)
s1.push(2)
s1.push(1)
p s1.pop() # => 1
p s1.pop() # => 2
p s1.pop() # => 3
