Pilas

pilasLas 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.

pila.gif

Una pila…y mucho dinero

Ejemplo #2: Simplificar una expresión

expresion

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:

  1. Dato: Representa el dato a almacenar. Puede ser de cualquier tipo; en este ejemplo se trata de una lista de enteros.
  2. Enlace: Es un puntero al siguiente elemento de la pila; con este puntero enlazamos con el sucesor, de forma que podamos construir la lista.
listas-4

Partes de un Nodo

Así una pila no es más que esto, un montón de nodos unidos.

pila

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:

apilar

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:

desapilar

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:

stack

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».

stack

La segunda operación es también muy fácil de visualizar, mira:

array

 

 

 


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:

Codigo.png

 

 

 

 

https://gist.github.com/SoyOscarRH/974196a8ca920f1d3ffd362f1f12f529

 

 

btn1 btn
btn

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s