Google+ Seguidores

viernes, 22 de junio de 2018

Implementación de una Pila (Stack) en Python

Introducción:


Hola amigos de Internet, mi nombre es Luis y les doy nuevamente la bienvenida a Mi Diario Python.

En el día de hoy nos dedicaremos a conocer el concepto de Pila (Stack) y realizaremos una pequeña implementación de una Pila en el lenguaje de programación Python.

¿Que es una Pila?


Una pila es una estructura de datos que permite almacenar y recuperar datos. Las pilas son muy utilizadas en el ámbito de la informática debido a su simplicidad y capacidad de dar respuesta a numerosos procesos.

Para el manejo de los datos cuenta con dos operaciones básicas: aplicar (push), que coloca un objeto en la pila, y su operación inversa desapilar (pop), que retira el ultimo elemento apilado.

Una metáfora que se utiliza con frecuencia es la idea de una pila de platos dispuesta en una cafetería en un contenedor con un muelle que mantiene la pila a nivel. En esa serie, solo el primer plato es visible y accesible para el usuario, todos las demás permanecen ocultos. Como se añaden nuevos platos, cada nuevo plato se convierte en la parte superior de la pila, permaneciendo escondidos debajo los demás. A medida que el plato superior se extrae de la pila, el inmediatamente inferior pasa a ocupar la parte superior de la pila. Dos principios importantes son ilustrados por esta metáfora: únicamente se accede al plato que se encuentra en la parte superior (el último en depositarse), y el resto de platos de la pila permanecen ocultos. Para extraer un plato distinto al superior habrá que extraer antes los que se encuentran sobre él.
Supongamos que se está procesando una función y en su interior llama a otra función. La función se abandona para procesar la función de la llamada, pero antes se almacena en una pila la dirección que apunta a la función. Ahora supongamos que esa nueva función llama a su vez a otra función. Igualmente, se almacena su dirección, se abandona y se atiende la petición. Así en tantos casos como existan peticiones. La ventaja de la pila es que no requiere definir ninguna estructura de control ni conocer las veces que el programa estará saltando entre funciones para después retomarlas, con la única limitación de la capacidad de almacenamiento de la pila. Conforme se van cerrando las funciones, se van rescatando las funciones precedentes mediante sus direcciones almacenadas en la pila y se va concluyendo su proceso, esto hasta llegar a la primera.
El caso típico es el de una función recursiva (que se llama a si misma), esto es posible implementarlo con sencillez mediante una pila. La función se llama a si misma tantas veces como sea necesario hasta que el resultado de la función cumpla la condición de retorno; entonces, todas las funciones abiertas van completando su proceso en cascada. No se necesita saber cuandas veces se anidará y, por tanto, tampoco cuando se cumplirá la condición, con la única limitación de la capacidad de la pila. De sobrepasarse ese límite, normalmente porque se entra en un bucle sin final, se produce el «error de desbordamiento de la pila».

Una pila hecha en Python:

 A continuación les mostrare un ejemplo realizada en Python. Se trata de una clase llamada Stack que implementa todas las funcionalidades de una pila:

# Implementación de una pila en pyhton

class Stack: # Creamos la clase Stack
    def __init__(self):
        self.items = []
    
    def is_empty(self): # Metodo para verificar si la pila esta vacia
        return self.items == []
    
    def push(self, item): # Metodo para insertar elementos a la pila
        self.items.insert(0, item)
    
    def pop(self): # Metodo para eliminar el ultimo elemento apilado
        return self.items.pop(0)
    
    def print_stack(self): # Metodo para mostrar los elementos de la pila
        print(self.items)
    
    
pila = Stack() # Creamos una instancia de la pila
 
# ingresamos algunos elementos a la pila
pila.push('a')
pila.push('b')
pila.push('c')
 
pila.print_stack() # Mostramos los elementos de la pila
 
pila.pop() # Utilizamos el metodo pop
pila.print_stack() # Mostramos nuevamente los elementos de la pila

['c', 'b', 'a']
['b', 'a']



Esta implementación también implica conocimientos sobre la Programación Orientada a Objetos. Puedes Aprender más acerca de este tema en nuestros tutoriales de Aprender Python.

¿Alguna duda? No dudes en dejar tu comentario.

Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.

No hay comentarios :
Write comentarios

Tu comentario es importante y nos motiva a seguir escribiendo...

Powered by Blogger .