Pila

en Estructura de Datos, Programación, Python

Estructura de Datos – Pilas en Python

Estructura de Datos: Pilas en Python

Hola a todos, primero quiero agradecer su apoyo al seguir el blog. Luego de unos días de descanso para poder pensar algunas cosas, aquí traigo un rápido ejemplo, del que me sugirieron escribir vía Twitter. El tema que vamos a revisar en esta ocasión, será el tema perteneciente a la asignatura de Estructuras de Datos: Pilas.

Para esto, los ejemplos que veremos serán llevados a cabo utilizando el lenguaje Python. Esto debido a que el objetivo de esta entrada es que el concepto quede claro para todos, y así pueda ser aplicado en cualquier lenguaje.

Pilas en Python¿Qué es una Pila?

Bien, una pila como estructura de datos, funciona exactamente cómo sucede en el mundo real en un conjunto de objetos superpuestos verticalmente. Imagina que eres estudiante, y estás buscando un objeto en tu mochila. Por más que mueves las cosas no logras encontrar lo que buscas, así que comienzas a sacar tus libros y los apilas, uno sobre otro. Con esto lograste ubicar el objeto que buscabas, paso siguiente, pones los libros de regreso en tu mochila, comenzando por el libro que se encuentra en el tope de la pila, y así hasta llegar al último. (Ya que confío en que eres ordenado).

Libros_apilados: Pilas en PythonSi analizamos un poco el ejemplo, podemos notar ciertas cosas, al agregar un nuevo elemento (un libro) a la pila, pasará a colocarse en el tope, ya que siempre en una pila, el último elemento en ingresar a la pila, será el tope de la misma. Mientras que para eliminar un elemento (guardar un libro) comenzaremos por el último en haber sido introducido a la pila (que se encuentra en el tope).

Esto es debido a que las pilas, son una estructura de datos del tipo LIFO (“Last In, First Out”), lo que nos dice que el último elemento en ingresar a la pila, será el primero en salir de ella. Espero el concepto haya quedado claro, de no ser así, tal vez con el siguiente ejemplo lo puedan comprender mejor.

Las operaciones distintivas de una pila son: pop(), para sacar (remover) el elemento en el tope de la pila y push() para empujar (añadir) un elemento en el tope. Cada vez que se realiza una operación push() la pila aumenta de tamaño y el tope se modifica siendo ahora el elemento añadido. En el caso de la operación pop() disminuye el tamaño de la pila, y el tope ahora será el elemento debajo del elemento a ser removido, generalmente esta operación devuelve el elemento removido. Otra operación que generalmente se implementa en una pila, es peek(), que devuelve el elemento que se encuentra como tope de la pila, sin removerlo.

Creando una pila con Python

class Stack:
elements = []

def __init__(self):
self.elements = []

def get_size(self):
return len(self.elements)

def push(self, x):
self.elements.append(x)

def pop(self):
return self.elements.pop()

def get_peek(self):
return self.elements[-1]

peek = property(fget=get_peek)
size = property(fget=get_size)


s = Stack()
s.push("a")
s.push("b")
s.push("c")
s.push("d")
s.push("e")
s.push("f")
s.push("h")

El código es algo simple, definimos una clase, la cual será nuestra Pila, que contiene un atributo elements, el cual será una lista vacía. Con __init__() establecemos la lista como vacía al crear una nueva instancia. Contiene un método get_size(), que retorna el tamaño de la pila, push() para añadir un elemento al tope de la pila, pop() para remover el elemento en el tope y devolverlo y get_peek(), que nos devuelve el elemento en el tope sin removerlo, en este caso utilizamos la expresión elements[-1], que es la forma de obtener el último elemento de una lista (recuerdan que en Python, una pila no es más que una lista).

Paso seguido creamos una instancia y añadimos algunos valores a nuestra pila, quedando de esta forma:

Pila recién creada: Pilas en PythonComo se observa, h es el elemento que se encuentra en el tope de la pila. Si ejecutamos las operaciones mencionadas anteriormente. get_size() devuelve el valor de 8, con get_peek() obténdremos “h”, y con pop() también obtendremos “h”, la diferencia es que ahora nuestra pila se encuentra de la siguiente forma.

Pila luego de Pop: Pilas en PythonSi observas, ahora el tope de la pila es “g”, y el tamaño actual es de 7.

Este ejemplo podría mejorarse un poco. Se podría añadir una validación para evitar que se intente hacer pop() si la lista se encuentra vacía, te invito a realizarlo a modo de práctica y lo expongas en los comentarios.

La pila es probablemente una de las estructuras de datos más utilizadas en el ámbito de la programación, y de la informática en general me atrevería a decir. Son utilizadas en ocasiones de manera inconsciente, cuando definimos algoritmos recursivos, dado que los lenguajes de programación implementan este mecanismo mediante una pila que almacena los llamados recursivos.

Y bien, es todo por ahora, espero haber sido lo suficientemente claro, y que los conceptos hayan quedado claros. Cualquier comentarios no dudes en escribirme, ya sea a mi cuenta de Twitter, en donde te invito a que me sigas, como en la FanPage de Facebook, la cual te invito a que le des Me gusta para que te mantengas al tanto de anuncios y nuevas entradas que iré publicando.

Saludos.

Deja un comentario