logo

Cua en Python

Com una pila, la cua és una estructura de dades lineal que emmagatzema elements en un First In First Out ( FIFO ) manera. Amb una cua, primer s'elimina l'element afegit menys recentment. Un bon exemple de cua és qualsevol cua de consumidors per a un recurs on el consumidor que ha arribat primer és atès primer.

Cua en Python



què és desktop ini

Les operacions associades a la cua són:

  • Cua: Afegeix un element a la cua. Si la cua està plena, es diu que és una condició de desbordament - Complexitat temporal: O(1)
  • D'acord amb: Elimina un element de la cua. Els elements apareixen en el mateix ordre en què s'empenyen. Si la cua està buida, es diu que és una condició de desbordament inferior - Complexitat temporal: O(1)
  • Davant: Obteniu l'element frontal de la cua - Complexitat temporal: O(1)
  • posterior: Obteniu l'últim element de la cua - Complexitat temporal: O(1)

Implementar una cua en Python

Hi ha diverses maneres d'implementar una cua Python. Aquest article tracta la implementació de la cua mitjançant estructures de dades i mòduls de la biblioteca Python. Python Queue es pot implementar de les maneres següents:

Implementació mitjançant llista

List és una estructura de dades integrada de Python que es pot utilitzar com a cua. En lloc de enqueue() i d'acord amb () , afegir() i pop() s'utilitza la funció. No obstant això, les llistes són bastant lentes per a aquest propòsit perquè inserir o suprimir un element al principi requereix desplaçar tots els altres elements en un, i requereix temps O(n).
El codi simula una cua mitjançant una llista de Python. Afegeix elements 'a' , 'b' , i 'c' a la cua i després les treu de cua, donant com a resultat una cua buida al final. La sortida mostra la cua inicial, elements retirats de la cua ( 'a' , 'b' , 'c' ), i l'estat buit de la cua.



Python 3






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

>

>

Sortida:

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ó mitjançant collections.deque

La cua a Python es pot implementar mitjançant la classe deque del mòdul de col·leccions. Es prefereix Deque a la llista en els casos en què necessitem operacions d'afegir i pop més ràpides des dels dos extrems del contenidor, ja que deque proporciona una complexitat de temps O(1) per a les operacions d'afegir i pop en comparació amb la llista que proporciona complexitat de temps O (n) . En lloc d'enqueue i deque, s'utilitzen les funcions append() i popleft().
El codi utilitza adeque>des delcollections>mòdul per representar una cua. S'adjunta 'a' , 'b' , i 'c' a la cua i els treu la cua amb q.popleft()> , resultant en una cua buida. Sense comentaris q.popleft()> després que la cua estigui buida, generaria unIndexError>. El codi mostra les operacions de la cua i gestiona un escenari de cua buida.

Python 3




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

mylivecricket

>

>

Sortida:

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ó mitjançant queue.Queue

Queue és un mòdul integrat de Python que s'utilitza per implementar una cua. queue.Queue(maxsize) inicialitza una variable a una mida màxima de maxsize. Una mida màxima de zero '0' significa una cua infinita. Aquesta cua segueix la regla FIFO.
Hi ha diverses funcions disponibles en aquest mòdul:

  • mida màxima – Nombre d'elements permesos a la cua.
  • buit() – Retorna True si la cua està buida, False en cas contrari.
  • ple () – Retorna True si hi ha elements de mida màxima a la cua. Si la cua s'ha inicialitzat amb maxsize=0 (per defecte), aleshores full() no retorna mai True.
  • aconseguir() – Eliminar i tornar un element de la cua. Si la cua està buida, espereu fins que hi hagi un element disponible.
  • get_nowait() – Retorna un element si n'hi ha un disponible immediatament, en cas contrari, puja QueueEmpty.
  • posar (element) – Posa un article a la cua. Si la cua està plena, espereu fins que hi hagi un espai lliure abans d'afegir l'element.
  • put_nowait(element) – Posa un article a la cua sense bloquejar. Si no hi ha cap ranura lliure disponible immediatament, augmenta QueueFull.
  • qsize() – Retorna el nombre d'elements de la cua.

Exemple: Aquest codi utilitza elQueue>classe de laqueue>mòdul. Comença amb una cua buida i l'omple amb ' a', 'b' , i 'c' . Després de treure la cua, la cua queda buida i s'afegeix '1'. Tot i estar buit abans, continua ple, ja que la mida màxima s'estableix en 3. El codi mostra les operacions de la cua, inclosa la comprovació de la plenitud i el buit.

Python 3




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

>

>

Sortida:

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