Python Coada: FIFO, LIFO Exemplu

⚡ Rezumat inteligent

Python O coadă (queue) este o structură de date liniară care stochează elemente și le eliberează într-o ordine definită. Modulul coadă oferă variante FIFO, LIFO și de prioritate pentru gestionarea sarcinilor, stocarea temporară a datelor și coordonarea în siguranță a lucrărilor între fire de execuție.

  • 🔢 FIFO: Clasa Queue elimină mai întâi cel mai vechi element, ideal pentru programarea și memorarea în buffer a sarcinilor.
  • 🔁 LIFO: Clasa LifoQueue elimină primul cel mai nou element, comportându-se ca o stivă.
  • 📦 Metode de bază: put(), get(), qsize(), empty() și full() gestionează elementele și raportează starea cozii.
  • 🧵 Fire-safe: Modulul queue se ocupă de blocare, astfel încât mai multe fire de execuție pot partaja o coadă în siguranță.
  • 🎯 Prioritate: PriorityQueue eliberează elementele în funcție de prioritate, nu în funcție de ordinea de inserare.
  • 🤖 Ajutor AI: Asistenții inteligenți artificiali generează cod de coadă și explică compromisurile FIFO și LIFO dintr-o simplă solicitare.

Python Coadă FIFO LIFO

Ce Este Python Coadă?

O coadă este un container care deține date. Datele care sunt introduse mai întâi vor fi șterse mai întâi și, prin urmare, o coadă este numită și „Primul intrat, primul ieșit” (FIFO). Coada are două capete în față și în spate. Articolele sunt introduse din spate și scoase din față.

Cum Python Lucru la coadă?

Coada poate fi comparată cu ușurință cu exemplul din lumea reală, rândul de oameni care așteaptă la coadă la ghișeul de bilete, persoana care stă prima va primi biletul prima, urmată de următoarea persoană și așa mai departe. Aceeași logică este valabilă și pentru structura de date a cozii.

Iată o reprezentare schematică a cozii:

Python Lucru la coadă

Spate reprezintă punctul în care articolele sunt introduse în coadă. În acest exemplu, 7 este valoarea pentru asta.

Față reprezintă punctul în care articolele din coadă vor fi eliminate. Dacă eliminați un articol din coadă, primul element pe care îl veți obține este 1, așa cum se arată în figură.

Elementul 1 a fost primul care a fost introdus în coadă, iar în timp ce îl scoate este primul care a ieșit. Prin urmare, coada se numește FIRST IN FIRST OUT (FIFO)

Python Lucru la coadă

Într-o coadă, articolele sunt eliminate în ordine și nu pot fi eliminate între ele. Pur și simplu nu puteți elimina elementul 5 la întâmplare din coadă, pentru a face asta va trebui să eliminați toate articolele înainte de 5. Articolele din coadă vor fi eliminate în ordinea în care sunt introduse.

Tipuri de coadă în Python

Există în principal două tipuri de coadă Python:

  • First in First out Queue: Pentru aceasta, elementul care merge primul va fi primul care iese. Pentru a lucra cu FIFO, trebuie să apelați Coadă() clasa din modulul de coadă.
  • Ultimul în coada Primului ieșit: aici, elementul care este introdus ultimul va fi primul care iese. Pentru a lucra cu LIFO, trebuie să apelați LifoQueue() clasa din modulul de coadă.

Python Instalare coada

Este foarte ușor să lucrezi cu coada în python. Iată pașii de urmat pentru a utiliza coada din codul dvs.

Pas 1) Trebuie doar să importați modulul de coadă, așa cum se arată mai jos:

import queue

Modulul este disponibil implicit cu python și nu aveți nevoie de nicio instalare suplimentară pentru a începe să lucrați cu coada. Există 2 tipuri de coadă FIFO (primul intrat, primul ieşit) şi LIFO (ultimul intrat, primul ieşit).

Pas 2) Pentru a lucra cu FIFO queue , apelați clasa Queue folosind modulul de coadă importat, după cum se arată mai jos:

import queue
q1 = queue.Queue()

Pas 3) Pentru a lucra cu coada LIFO, apelați clasa LifoQueue() după cum se arată mai jos:

import queue
q1 = queue.LifoQueue()

Metode disponibile în clasa Queue și LifoQueue

Următoarele sunt metodele importante disponibile în clasa Queue și LifoQueue:

  • pune(articol): Acest lucru va pune articolul în coadă.
  • obține(): Acest lucru vă va returna un articol din coadă.
  • gol(): Va returna true dacă coada este goală și false dacă sunt prezente elemente.
  • qsize(): returnează dimensiunea cozii.
  • deplin(): returnează adevărat dacă coada este plină, în caz contrar, fals.

Exemplu de coadă First In First Out

În cazul primului intrat, primul ieșit, elementul care iese primul va fi primul care iese.

Adăugați și articol într-o coadă

Să lucrăm la un exemplu pentru a adăuga un articol într-o coadă. Pentru a începe să lucrați cu coada, importați mai întâi coada de module, așa cum se arată în exemplul de mai jos.

Pentru a adăuga un element, puteți utiliza metoda put() așa cum se arată în exemplu:

import queue
q1 = queue.Queue()
q1.put(10) #this will additem 10 to the queue.

În mod implicit, dimensiunea cozii este infinită și puteți adăuga orice număr de articole la aceasta. În cazul în care doriți să definiți dimensiunea cozii, același lucru se poate face după cum urmează

import queue
q1 = queue.Queue(5) #The max size is 5.
q1.put(1)
q1.put(2)
q1.put(3)
q1.put(4)
q1.put(5)
print(q1.full()) # will return true.

ieșire:

True

Acum dimensiunea cozii este de 5 și nu va dura mai mult de 5 elemente, iar metoda q1.full() va returna true. Adăugarea altor elemente nu va mai executa codul.

Eliminați un articol din coadă

Pentru a elimina un articol din coadă, puteți folosi metoda numită get(). Această metodă permite articole din coadă atunci când sunt apelate.

Următorul exemplu arată cum să eliminați un articol din coadă.

import queue
q1 = queue.Queue()
q1.put(10)

item1 = q1.get()

print('The item removed from the queue is ', item1)

ieșire:

The item removed from the queue is  10

Exemplu de coadă Last In First Out

În cazul ultimului în coada primul ieşit, elementul care este introdus ultimul va fi primul care iese.

Pentru a lucra cu LIFO, adică ultimul în coada primul ieşit, trebuie să importam modulul de coadă şi să folosim metoda LifoQueue().

Adăugați și articol într-o coadă

Aici vom înțelege cum să adăugați un articol la coada LIFO.

import queue
q1 = queue.LifoQueue()
q1.put(10)

Trebuie să utilizați metoda put() pe LifoQueue, așa cum se arată în exemplul de mai sus.

Eliminați un articol din coadă

Pentru a elimina un articol din LIFOqueue, puteți folosi metoda get() .

import queue
q1 = queue.LifoQueue()
q1.put(10)

item1 = q1.get()

print('The item removed from the LIFO queue is ', item1)

ieșire:

The item removed from the LIFO queue is  10

Adăugați mai mult de 1 articol într-o coadă

În exemplele de mai sus, am văzut cum să adăugați un singur articol și să eliminați elementul pentru FIFO și LIFOqueue. Acum vom vedea cum să adăugăm mai mult de un articol și, de asemenea, să îl eliminam.

Adăugați și elementul într-o coadă FIFO

import queue
q1 = queue.Queue()

for i in range(20):
    q1.put(i) # this will additem from 0 to 20 to the queue

Eliminați un articol din coada FIFO

import queue
q1 = queue.Queue()

for i in range(20):
    q1.put(i) # this will additem from 0 to 20 to the queue

while not q1.empty():
print("The value is ", q1.get()) # get() will remove the item from the queue.

ieșire:

The value is  0
The value is  1
The value is  2
The value is  3
The value is  4
The value is  5
The value is  6
The value is  7
The value is  8
The value is  9
The value is  10
The value is  11
The value is  12
The value is  13
The value is  14
The value is  15
The value is  16
The value is  17
The value is  18
The value is  19

Adăugați și element într-o coadă LIFO

import queue
q1 = queue.LifoQueue()
for i in range(20):
    q1.put(i) # this will additem from 0 to 20 to the queue

Eliminați un articol din coada LIFO

import queue
q1 = queue.LifoQueue()

for i in range(20):
    q1.put(i) # this will additem from 0 to 20 to the queue

while not q1.empty():
print("The value is ", q1.get()) # get() will remove the item from the queue.

ieșire:

The value is  19
The value is  18
The value is  17
The value is  16
The value is  15
The value is  14
The value is  13
The value is  12
The value is  11
The value is  10
The value is  9
The value is  8
The value is  7
The value is  6
The value is  5
The value is  4
The value is  3
The value is  2
The value is  1
The value is  0 

Coada de sortare

Următorul exemplu arată sortarea cozii. Algoritmul folosit pentru sortare este sortarea cu bule.

import queue
q1 = queue.Queue()
#Addingitems to the queue
q1.put(11)
q1.put(5)
q1.put(4)
q1.put(21)
q1.put(3)
q1.put(10)

#using bubble sort on the queue
n =  q1.qsize()
for i in range(n):
    x = q1.get() # the element is removed
    for j in range(n-1):
        y = q1.get() # the element is removed
        if x > y :  
            q1.put(y)   #the smaller one is put at the start of the queue
        else:
            q1.put(x)  # the smaller one is put at the start of the queue
            x = y     # the greater one is replaced with x and compared again with nextelement
    q1.put(x)

while (q1.empty() == False): 
print(q1.queue[0], end = " ")  
        q1.get()

ieșire:

3 4 5 10 11 21

Reversing Queue

Pentru a inversa coada, puteți utiliza o altă coadă și recursivitate.

Următorul exemplu arată cum să inversați coada.

Exemplu:

import queue
q1 = queue.Queue()

q1.put(11)
q1.put(5)
q1.put(4)
q1.put(21)
q1.put(3)
q1.put(10)

def reverseQueue (q1src, q2dest) :  
    buffer = q1src.get()
    if (q1src.empty() == False) :
reverseQueue(q1src, q2dest)      #using recursion
    q2dest.put(buffer)
return q2dest

q2dest = queue.Queue()
qReversed = reverseQueue(q1,q2dest)

while (qReversed.empty() == False): 
print(qReversed.queue[0], end = " ")  
        qReversed.get()

ieșire:

10 3 21 4 5 11

Întrebări frecvente

O coadă este FIFO, deci cel mai vechi element pleacă primul, în timp ce o stivă este LIFO, unde cel mai nou element pleacă primul. PythonModulul queue al lui oferă Queue pentru comportamentul FIFO și LifoQueue pentru comportamentul stivei.

Da. Queue, LifoQueue și PriorityQueue sunt construite pentru programe cu fire de execuție multiple și gestionează blocarea intern, astfel încât mai multe fire de execuție producătoare și consumatoare pot partaja o coadă fără condiții de concurență sau date corupte.

queue.Queue este thread-safe și conceput pentru threading-ul producător-consumator. collections.deque este o coadă dublă, de uz general, mai rapidă, pentru cod cu un singur thread, care acceptă adăugări și extrageri rapide de la ambele capete.

O funcție PriorityQueue eliberează elementele în ordinea priorității în loc de ordinea inserării. Se pun tupluri (priority, data), iar get() returnează primul numărul cu cea mai mică prioritate, ceea ce este potrivit pentru planificatoare și algoritmii cu cea mai scurtă cale.

În mod implicit, get() blochează și așteaptă până când un element este disponibil. Transmite block=False sau folosește get_nowait() pentru a ridica coada. Excepția Empty este imediată în loc să aștepte un element nou.

Transmiteți valoarea maxsize constructorului, de exemplu queue.Queue(5). Când coada este plină, put() se blochează până când se eliberează spațiu, iar full() returnează True. O valoare maxsize de 0 înseamnă o coadă nelimitată.

Asistenții inteligenți artificiali generează cod de coadă producător-consumator, explică compromisurile FIFO versus LIFO și sugerează dacă queue.Queue, deque sau asyncio.Queue se potrivesc cazului dumneavoastră. De asemenea, ajută la identificarea blocajelor și a apelurilor task_done() lipsitoare.

Da. GitHub Copilot completează automat configurarea cozii, buclele put() și get() și firele de execuție worker dintr-un comentariu. Instrumentele de inteligență artificială Agentic merg mai departe, refactorizând codul de blocare în asyncio.Queue și adăugând gestionarea erorilor într-un fișier.

Rezumați această postare cu: