Coda in Python

Coda in Python

Come uno stack, la coda è una struttura di dati lineare che memorizza gli elementi in un First In First Out ( FIFO ) maniera. Con una coda, l'elemento aggiunto meno di recente viene rimosso per primo. Un buon esempio di coda è qualsiasi coda di consumatori per una risorsa in cui il consumatore arrivato per primo viene servito per primo.

Coda in Python

Le operazioni associate alla coda sono:

  • Accodare: Aggiunge un elemento alla coda. Se la coda è piena, si parla di condizione di Overflow – Complessità temporale: O(1)
  • Di conseguenza: Rimuove un elemento dalla coda. Gli elementi vengono estratti nello stesso ordine in cui vengono inseriti. Se la coda è vuota, si parla di condizione di underflow – Complessità temporale: O(1)
  • Davanti: Ottieni l'elemento in primo piano dalla coda – Complessità temporale: O(1)
  • Posteriore: Ottieni l'ultimo elemento dalla coda – Complessità temporale: O(1)

Implementa una coda in Python

Esistono vari modi per implementare una coda in Pitone. Questo articolo tratta l'implementazione della coda utilizzando strutture dati e moduli della libreria Python. La coda Python può essere implementata nei seguenti modi:

Implementazione utilizzando l'elenco

List è una struttura dati incorporata di Python che può essere utilizzata come coda. Invece di enqueue() e di conseguenza () , aggiungere() E pop() viene utilizzata la funzione. Tuttavia, le liste sono piuttosto lente per questo scopo perché l'inserimento o l'eliminazione di un elemento all'inizio richiede lo spostamento di uno di tutti gli altri elementi, richiedendo tempo O(n).
Il codice simula una coda utilizzando un elenco Python. Aggiunge elementi 'UN' , 'B' , E 'C' alla coda e poi li rimuove dalla coda, risultando in una coda vuota alla fine. L'output mostra la coda iniziale, gli elementi rimossi dalla coda ( 'UN' , 'B' , 'C' ) e lo stato vuoto della coda.

Python3




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)>

Produzione:

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 

Implementazione utilizzandocollection.deque

La coda in Python può essere implementata utilizzando la classe deque dal modulocollections. Deque è preferibile rispetto a list nei casi in cui abbiamo bisogno di operazioni di accodamento e pop più rapide da entrambe le estremità del contenitore, poiché deque fornisce una complessità temporale O(1) per le operazioni di accodamento e pop rispetto a list che fornisce una complessità temporale O(n) . Invece di enqueue e deque, vengono utilizzate le funzioni append() e popleft().
Il codice utilizza a deque> dal collections> modulo per rappresentare una coda. Si aggiunge 'UN' , 'B' , E 'C' alla coda e li rimuove dalla coda con q.popleft()> , risultando in una coda vuota. Senza commenti q.popleft()> dopo che la coda è vuota verrà generato un IndexError> . Il codice illustra le operazioni sulla coda e gestisce uno scenario di coda vuota.

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)>

Produzione:

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 

Implementazione utilizzando tail.Queue

Queue è un modulo integrato di Python che viene utilizzato per implementare una coda. coda.Queue(maxsize) inizializza una variabile su una dimensione massima di maxsize. Una dimensione massima pari a zero '0' indica una coda infinita. Questa coda segue la regola FIFO.
In questo modulo sono disponibili diverse funzioni:

  • maxsize – Numero di elementi consentiti nella coda.
  • vuoto() – Restituisce True se la coda è vuota, False altrimenti.
  • pieno() – Restituisce True se nella coda sono presenti elementi di dimensione massima. Se la coda è stata inizializzata con maxsize=0 (il valore predefinito), full() non restituisce mai True.
  • Ottenere() – Rimuovere e restituire un elemento dalla coda. Se la coda è vuota, attendi finché un articolo non è disponibile.
  • get_nowait() – Restituisce un elemento se è immediatamente disponibile, altrimenti solleva QueueEmpty.
  • mettere (oggetto) – Metti un elemento in coda. Se la coda è piena, attendi che sia disponibile uno spazio libero prima di aggiungere l'articolo.
  • put_nowait(oggetto) – Metti un elemento in coda senza bloccarlo. Se nessuno slot libero è immediatamente disponibile, rilancia QueueFull.
  • qdimensione() – Restituisce il numero di elementi in coda.

Esempio: Questo codice utilizza il Queue> classe da queue> modulo. Inizia con una coda vuota e la riempie con ' UN', 'B' , E 'C' . Dopo la rimozione dalla coda, la coda si svuota e viene aggiunto '1'. Nonostante fosse vuota in precedenza, rimane piena, poiché la dimensione massima è impostata su 3. Il codice mostra le operazioni sulla coda, incluso il controllo del pieno e del vuoto.

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())>

Produzione:

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