Creación de Colas con Stacks en Python

Clase 20 de 23Curso de Estructuras de Datos Lineales con Python

Resumen

¿Cómo crear una cola utilizando dos pilas?

Crear una cola usando dos pilas puede parecer un reto, al tratarse de estructuras de datos que funcionan bajo principios diferentes. Mientras que las pilas operan bajo el principio de "último en entrar, primero en salir" (LIFO por sus siglas en inglés), las colas usan "primero en entrar, primero en salir" (FIFO). Pero tranquilo, no es tan complejo como parece, ya que con un entendimiento claro de la lógica, podemos resolverlo de manera eficaz y elegante en Python.

¿Cómo se estructura la clase colas?

Para empezar, crearemos una clase llamada Cue con dos listas vacías que simulan nuestras pilas internas. Vamos a llamar a estas listas InboundStack y OutboundStack.

class Cue:
    def __init__(self):
        self.inbound_stack = []
        self.outbound_stack = []

¿Cómo se implementa el método para agregar a la cola?

El método nq servirá para añadir datos a nuestra cola. Utilizaremos la lista InboundStack y su función append() para ello, lo cual es bastante sencillo.

def nq(self, data):
    self.inbound_stack.append(data)

¿Cómo se implementa el método para eliminar de la cola?

El método deck es más complicado, pero vamos a desglosar su lógica. Debemos atender el funcionamiento FIFO al mover elementos de InboundStack a OutboundStack usando el método pop(). Esto nos permitirá revertir el orden.

def deck(self):
    if not self.outbound_stack:
        while self.inbound_stack:
            self.outbound_stack.append(self.inbound_stack.pop())
    return self.outbound_stack.pop()

¿Cómo probar y entender la funcionalidad?

Para verificar el funcionamiento, observemos cómo la clase Cue interactúa con números:

  1. Creamos una instancia de la clase y usamos nq para añadir números secuenciales: 5, 6, 7.
  2. Usamos deck para quitar números y los resultados reflejan el orden FIFO: el 5 saldrá antes que el 6 y 7.
# Simulación en shell de Python
from stack_base_cue import Cue

numbers_queue = Cue()
numbers_queue.nq(5)
numbers_queue.nq(6)
numbers_queue.nq(7)

print(numbers_queue.deck())  # Imprime: 5

Reflexiones finales

El uso de dos pilas para simular una cola no solo es un buen ejercicio lógico, sino una habilidad útil para entrevistas de trabajo técnicas, donde puedes enfrentar restricciones como "usa dos pilas", las cuales te obligan a pensar fuera de las soluciones habituales. Al practicar esto, comprenderás mejor cómo las estructuras de datos están interconectadas y cómo podrías optimizar su uso en el desarrollo de software avanzado. Sigue aprendiendo y explorando, ¡la experiencia vendrá con la práctica!