Tutorial sulla struttura dei dati della coda Python

Master operazioni coda FIFO in Python. Esegui ed esegui il nostro esempio di coda interattiva che mostra i metodi di accodamento e rimozione dalla coda.

Prova nell'editor

Panoramica

Una coda è una struttura di dati lineare che funziona secondo il principio FIFO (First-In, First-Out). Gli elementi vengono aggiunti nella parte posteriore (accodamento) e rimossi dalla parte anteriore (decoda), proprio come una fila alla cassa in un negozio.

Le code sono fondamentali in informatica per elaborare le attività nell'ordine esatto in cui arrivano. Fungono da buffer che disaccoppiano i processi di produzione e consumo.

Python fornisce diversi modi per creare code: elenchi di base, il modulo `collections.deque` per operazioni veloci thread-safe e il modulo `queue.Queue` progettato specificamente per applicazioni multi-thread.

Codice e output di esecuzione

Una coda FIFO interattiva creata utilizzandocollections.deque per operazioni di rimozione anteriore efficienti.

queue_demo.py
Prova nell'editor
from collections import deque

class Queue:
    def __init__(self):
        self.buffer = deque()
        
    def enqueue(self, item):
        self.buffer.append(item)
        print(f"Enqueued: {item}")
        
    def dequeue(self):
        if self.is_empty():
            return "Underflow: Queue is empty"
        dequeued = self.buffer.popleft()
        print(f"Dequeued: {dequeued}")
        return dequeued
        
    def is_empty(self):
        return len(self.buffer) == 0
        
    def size(self):
        return len(self.buffer)

# Test the Queue
q = Queue()
q.enqueue("Customer 1")
q.enqueue("Customer 2")
q.enqueue("Customer 3")

print(f"Queue Size: {q.size()}")
q.dequeue()
q.dequeue()

print(f"Remaining in Queue: {list(q.buffer)}")
Uscita terminale
Enqueued: Customer 1
Enqueued: Customer 2
Enqueued: Customer 3
Queue Size: 3
Dequeued: Customer 1
Dequeued: Customer 2
Remaining in Queue: ['Customer 3']

Implementazione passo dopo passo

  • Gestione delle richieste asincrone nei framework web del server
  • Code di pianificazione dei lavori nei sistemi operativi
  • Broker di messaggi e buffer di coda (come RabbitMQ o Redis)

Domande frequenti

Perché non utilizzare list.pop(0) per annullare la coda in Python?

L'uso di `list.pop(0)` è lento perché richiede lo spostamento di tutti gli elementi successivi nella memoria di un indice a sinistra, con conseguente prestazione O(n). Al contrario, `deque.popleft()` viene eseguito nel tempo costante O(1).

Cos'è una coda prioritaria?

Una coda con priorità è una variazione in cui gli elementi vengono serviti in base a una priorità associata anziché all'ordine di arrivo. Python lo implementa tramite il modulo `heapq`.

Argomenti correlati