logo

Cola en Python

Al igual que una pila, la cola es una estructura de datos lineal que almacena elementos en un orden primero en entrar, primero en salir ( FIFO ) manera. En una cola, el elemento agregado menos recientemente se elimina primero. Un buen ejemplo de cola es cualquier cola de consumidores de un recurso en la que el consumidor que llegó primero recibe el servicio primero.

Cola en Python



Las operaciones asociadas con la cola son:

  • Poner en cola: Agrega un elemento a la cola. Si la cola está llena, se dice que es una condición de desbordamiento – Complejidad del tiempo: O(1)
  • Respectivamente: Elimina un elemento de la cola. Los elementos aparecen en el mismo orden en que se empujan. Si la cola está vacía, se dice que es una condición de desbordamiento insuficiente – Complejidad del tiempo: O(1)
  • Frente: Obtener el elemento principal de la cola – Complejidad del tiempo: O(1)
  • Trasero: Obtener el último elemento de la cola – Complejidad del tiempo: O(1)

Implementar una cola en Python

Hay varias formas de implementar una cola en Pitón. Este artículo cubre la implementación de la cola utilizando estructuras de datos y módulos de la biblioteca Python. Python Queue se puede implementar de las siguientes maneras:

Implementación usando lista

La lista es una estructura de datos incorporada de Python que se puede utilizar como cola. En lugar de poner en cola() y respectivamente () , adjuntar() y estallido() Se utiliza la función. Sin embargo, las listas son bastante lentas para este propósito porque insertar o eliminar un elemento al principio requiere desplazar todos los demás elementos en uno, lo que requiere un tiempo O(n).
El código simula una cola usando una lista de Python. Agrega elementos 'a' , 'b' , y 'C' a la cola y luego los saca de la cola, lo que da como resultado una cola vacía al final. El resultado muestra la cola inicial, los elementos retirados de la cola ( 'a' , 'b' , 'C' ) y el estado vacío de la cola.



Python3






interfaz comparable en java

queue>=> []> queue.append(>'a'>)> queue.append(>'b'>)> queue.append(>'c'>)> print>(>'Initial queue'>)> print>(queue)> print>(>' Elements dequeued from queue'>)> print>(queue.pop(>0>))> print>(queue.pop(>0>))> print>(queue.pop(>0>))> print>(>' Queue after removing elements'>)> print>(queue)>

>

>

Producción:

Initial queue ['a', 'b', 'c'] Elements dequeued from queue a b c Queue after removing elements []>
Traceback (most recent call last):  File '/home/ef51acf025182ccd69d906e58f17b6de.py', line 25, in   print(queue.pop(0)) IndexError: pop from empty list>

Implementación usando colecciones.deque

La cola en Python se puede implementar usando la clase deque del módulo de colecciones. Se prefiere deque a list en los casos en los que necesitamos operaciones de agregar y extraer más rápidas desde ambos extremos del contenedor, ya que deque proporciona una complejidad de tiempo O(1) para operaciones de agregar y extraer en comparación con la lista que proporciona complejidad de tiempo O(n). . En lugar de poner en cola y quitar, se utilizan las funciones append() y popleft().
El código utiliza undeque>desde elcollections>módulo para representar una cola. se agrega 'a' , 'b' , y 'C' a la cola y los saca de la cola con q.popleft()> , lo que da como resultado una cola vacía. Descomentar q.popleft()> después de que la cola esté vacía generaría unIndexError>. El código demuestra las operaciones de la cola y maneja un escenario de cola vacía.

Python3




from> collections>import> deque> q>=> deque()> q.append(>'a'>)> q.append(>'b'>)> q.append(>'c'>)> print>(>'Initial queue'>)> print>(q)> print>(>' Elements dequeued from the queue'>)> print>(q.popleft())> print>(q.popleft())> print>(q.popleft())> print>(>' Queue after removing elements'>)> print>(q)>

>

>

Producción:

Initial queue deque(['a', 'b', 'c']) Elements dequeued from the queue a b c Queue after removing elements deque([])>
Traceback (most recent call last):  File '/home/b2fa8ce438c2a9f82d6c3e5da587490f.py', line 23, in   q.popleft() IndexError: pop from an empty deque>

Implementación usando queue.Queue

Queue es un módulo integrado de Python que se utiliza para implementar una cola. queue.Queue(maxsize) inicializa una variable a un tamaño máximo de maxsize. Un tamaño máximo de cero '0' significa una cola infinita. Esta cola sigue la regla FIFO.
Hay varias funciones disponibles en este módulo:

  • tamaño máximo – Número de artículos permitidos en la cola.
  • vacío() – Devuelve Verdadero si la cola está vacía, Falso en caso contrario.
  • lleno() – Devuelve True si hay elementos de tamaño máximo en la cola. Si la cola se inicializó con maxsize=0 (el valor predeterminado), entonces full() nunca devuelve True.
  • conseguir() – Eliminar y devolver un artículo de la cola. Si la cola está vacía, espere hasta que haya un artículo disponible.
  • get_nowait() – Devuelve un artículo si hay uno disponible inmediatamente; de ​​lo contrario, genera QueueEmpty.
  • poner (artículo) – Poner un artículo en la cola. Si la cola está llena, espere hasta que haya un espacio libre disponible antes de agregar el artículo.
  • put_nowait(elemento) – Poner un elemento en la cola sin bloquearlo. Si no hay ningún espacio libre disponible inmediatamente, aumente QueueFull.
  • qtamaño() – Devuelve el número de elementos en la cola.

Ejemplo: Este código utiliza elQueue>clase de laqueue>módulo. Comienza con una cola vacía y la llena con ' a', 'b' , y 'C' . Después de quitar la cola, la cola queda vacía y se agrega '1'. A pesar de estar vacía antes, permanece llena, ya que el tamaño máximo está establecido en 3. El código demuestra las operaciones de la cola, incluida la verificación de si está llena y vacía.

Python3




from> queue>import> Queue> q>=> Queue(maxsize>=> 3>)> print>(q.qsize())> q.put(>'a'>)> q.put(>'b'>)> q.put(>'c'>)> print>(>' Full: '>, q.full())> print>(>' Elements dequeued from the queue'>)> print>(q.get())> print>(q.get())> print>(q.get())> print>(>' Empty: '>, q.empty())> q.put(>1>)> print>(>' Empty: '>, q.empty())> print>(>'Full: '>, q.full())>

aplicaciones ocultas en este dispositivo
>

>

Producción:

0 Full: True Elements dequeued from the queue a b c Empty: True Empty: False Full: False>