Ce este structura datelor cozii în Python?



Acest articol vă va oferi o cunoaștere detaliată și cuprinzătoare a structurilor de date în coadă în Python, cu o mulțime de exemple.

Așa cum ați studiat deja despre importanța structurilor de date în articolul anterior, Permiteți să ne scufundăm chiar în subiectul articolului, adică Structura de date a cozii. Voi discuta următoarele subiecte:

Necesitatea structurii de date în coadă

Să presupunem că vrei pentru un film într-o zi. În multiplex, biletele au fost emise pe baza primul venit, primul servit, iar oamenii stăteau unul lângă celălalt, așteptându-și rândul. Deci ce vei face?? Probabil că te-ai dus în spate și ai stat în spatele ultimei persoane care aștepta biletul.





queue-data-structure

Aici, oamenii stau unul în spatele celuilalt și sunt deserviți pe baza First-In-First-Out (FIFO) mecanism. Un astfel de aranjament este cunoscut sub numele de Coadă.



Exemple de viață cotidiană de coadă

Să luăm în considerare câteva exemple în care vedem tipul de coadă de lucru în viața de zi cu zi:

  • Sistem de răspuns telefonic- Persoana care apelează mai întâi pe gadget-ul dvs. este asistată mai întâi.
  • Aparat de verificare a bagajelor - Verifică bagajele care au fost păstrate mai întâi pe banda transportoare.
  • Vehicule pe podul de taxare - Vehiculele care sosesc devreme pleacă mai întâi.
  • Call center - sistemele de telefonie vor folosi Cozi, pentru a menține oamenii care îi sună în ordine, până când un reprezentant al serviciului este gratuit.

Urmează toate aceste exemple Primul intrat și ultimul ieșit strategie.

Crearea unei structuri de date în coadă

În afară de operațiile complementare, pot spune că principalele operațiuni posibile pe coadă sunt:



unu. Faceți coadă sau adăugați un element la sfârșitul cozii.

2. De-așteptați sau eliminați un element din partea din față a cozii

Acum, să începem prin crearea clasei Queue în Python:

class Queue: def __init __ (self, max_size): self .__ max_size = max_size self .__ elements = [None] * self .__ max_size self .__ rear = -1 self .__ front = 0
  • max_size este numărul maxim de elemente așteptate în coadă.
  • Elementele cozii sunt stocate în lista python
  • partea din spate indică poziția index a ultimului element din coadă.
  • Partea din spate este inițial considerată -1 deoarece coada este goală
  • Front indică poziția primului element din coadă.
  • Frontul este considerat inițial 0, deoarece va indica întotdeauna primul element al cozii

Strângeți

Acum, când încercați să puneți elemente în coadă, trebuie să vă amintiți următoarele puncte:

  • Dacă există spațiu în coadă sau nu, adică dacă spatele este egal cu max_size -1
  • Partea din spate va indica ultimul element inserat în coadă.

Deci, care va fi algoritmul ??

#returns max_size of queue def get_max_size (self): return self .__ max_size #returnează valoarea bool indiferent dacă coada este completă sau nu, True dacă este completă și False altfel def is_full (self): return self .__ rear == self .__ max_size-1 # introduce / stoarce date în coadă dacă nu este complet def enqueue (self, data): if (self.is_full ()): print ('Coada este plină. Nu există coadă posibilă') else: self .__ spate + = 1 self. __elements [self .__ rear] = data #afișează tot conținutul afișării def coadă (auto): pentru i în raza (0, self .__ poster + 1): print (auto .__ elemente [i]) # Puteți utiliza mai jos __str __ () pentru a imprima elementele obiectului DS în timp ce depanarea def __str __ (auto): msg = [] index = self .__ front while (index<=self.__rear): msg.append((str)(self.__elements[index])) index+=1 msg=' '.join(msg) msg='Queue data(Front to Rear): '+msg return msg

Acum, când executați următoarele:

amestecarea datelor de tablou nu funcționează

coadă1 = Coadă (5)

#Accesați toate elementele necesare.

queue1.enqueue („A”)

queue1.enqueue („B”)

queue1.enqueue („C”)

queue1.enqueue („D”)

queue1.enqueue („E”)

queue1.display ()

queue1.enqueue („F”)

print (coada1)

Ieșire:

LA

B

C

D

ESTE

Coada este plină. Nu este posibilă o coadă

Date de coadă (din față în spate): A B C D E

De-coada

Acum, pe măsură ce ați inserat / pus în coadă elementele în coadă, doriți să le stoarceți / ștergeți din față, deci trebuie să aveți grijă de următoarele:

  • Există elemente în coadă, adică partea din spate nu trebuie să fie egală cu -1.
  • În al doilea rând, trebuie să vă amintiți că, pe măsură ce elementele sunt șterse din față, atunci după ștergere fața ar trebui să fie incrementată la punctul următor față.
  • Partea frontală nu trebuie să indice sfârșitul cozii, adică egală cu max_size.

Deci, care va fi algoritmul ??

#funcție pentru a verifica dacă coada este goală sau nu def is_empty (self): if (self .__ rear == - 1 or self .__ front == self .__ max_size): return True else: return False #function to deque a element and return def defueque (self): if (self.is_empty ()): print ('coada este deja goală') else: data = self .__ elements [self .__ front] self .__ front + = 1 return data #function to display elements from față în spate dacă coada nu este goală afișare def (auto): if (nu auto.is_empty ()): pentru i în raza de acțiune (auto .__ față, auto .__ spate + 1): print (auto .__ elemente [i]) altceva : print („coadă goală”)

Acum, când executați următoarele:

coadă1 = Coadă (5)

#Accesați toate elementele necesare

queue1.enqueue („A”)

queue1.enqueue („B”)

queue1.enqueue („C”)

queue1.enqueue („D”)

cum să devii un dezvoltator de tablouri

queue1.enqueue („E”)

print (coada1)

#Dequeue toate elementele necesare

print („Dequeued:“, queue1.dequeue ())

print („Dequeued:“, queue1.dequeue ())

print („Dequeued:“, queue1.dequeue ())

print („Dequeued:“, queue1.dequeue ())

print („Dequeued:“, queue1.dequeue ())

print („Dequeued:“, queue1.dequeue ())

# Afișați toate elementele din coadă.

queue1.display ()

Ieșire:

Date de coadă (din față în spate): A B C D E

Stors: A

Stors: B

Stors: C

Stors: D

Stors: E

coada este deja goală

Stors: Nici unul

coadă goală

php print_r la șir

Aplicații ale cozii

De acum, ați înțeles deja noțiunile de bază ale cozii. Acum, pentru a ne adânci, vom analiza unele dintre aplicațiile sale.

  • Exemplul 1:

Coadă de imprimare în Windows folosește o coadă pentru a stoca toate lucrările de imprimare active și în așteptare. Când dorim să tipărim documente, emitem comenzi de tipărire una după alta. Pe baza comenzilor de imprimare, documentele vor fi aliniate în coada de imprimare. Când imprimanta este gata, documentul va fi trimis prima în prima ordine pentru a fi tipărit.

Să presupunem că ați emis comenzi de imprimare pentru 3 documente în ordinea doc1, urmate de doc2 și doc3.
Coada de imprimare va fi completată după cum se arată mai jos:

doc-n, unde doc este documentul trimis spre tipărire și n, este numărul de pagini din document. De exemplu, doc2-10 înseamnă că doc2 trebuie tipărit și are 10 pagini. Iată un cod care simulează operația de coadă de imprimare. Parcurgeți codul și observați modul în care coada este utilizată în această implementare.

class Queue: def __init __ (self, max_size): self .__ max_size = max_size self .__ elements = [None] * self .__ max_size self .__ rear = -1 self .__ front = 0 def is_full (self): if (self .__ rear = = self .__ max_size-1): return True return False def is_empty (self): if (self .__ front> self .__ rear): return True Return False def enqueue (self, data): if (self.is_full ()): print ('Coada este plină !!!') else: self .__ poster + = 1 self .__ elements [self .__ rear] = date def dequeue (self): if (self.is_empty ()): print ('Coada este goală! !! ') else: data = self .__ elements [self .__ front] self .__ front + = 1 return data def display (self): pentru index în interval (self .__ front, self .__ poster + 1): print (self .__ elements [index]) def get_max_size (self): return self .__ max_size #You can use the below __str __ () to print the elements of the DS object while #debugging def __str __ (self): msg = [] index = self .__ front while (index<=self.__rear): msg.append((str)(self.__elements[index])) index+=1 msg=' '.join(msg) msg='Queue data(Front to Rear): '+msg return msg #function that enqueue are the documents to be printed in Queue named print_queue def send_for_print(doc): global print_queue if(print_queue.is_full()): print('Queue is full') else: print_queue.enqueue(doc) print(doc,'sent for printing') #function that prints the document if number of pages of document is less than #total number of pages in printer def start_printing(): global print_queue while(not print_queue.is_empty()): #here we dequeue the Queue and take the coument that was input first for printing. doc=print_queue.dequeue() global pages_in_printer #the aim of this for loop is to find number of pages of the of document which is doc name followed by “-“ for i in range(0,len(doc)): if(doc[i]=='-'): no_of_pages=int(doc[i+1:]) break if(no_of_pages<=pages_in_printer): print(doc,'printed') pages_in_printer-=no_of_pages print('Remaining no. of pages in printer:', pages_in_printer) else: print('Couldn't print',doc[:i],'. Not enough pages in the printer.') pages_in_printer=12 print_queue=Queue(10) send_for_print('doc1-5') send_for_print('doc2-3') send_for_print('doc3-6') start_printing()

Ieșire:

doc1-5 trimis pentru tipărire

doc2-3 trimis pentru tipărire

doc3-6 trimis pentru tipărire

doc1-5 tipărit

Rămânând nr. de pagini în imprimantă: 7

doc2-3 tipărit

Rămânând nr. de pagini în imprimantă: 4

Nu s-a putut imprima doc3. Nu există suficiente pagini în imprimantă

  • Exemplul 2:

Să încercăm să înțelegem un alt exemplu care utilizează structura de date Coadă. Puteți încerca să înțelegeți codul și să spuneți ce face următoarea funcție?

  1. fun fun (n):
  2. aqueue = Coadă (100)
  3. pentru num în intervalul (1, n + 1):
  4. coadă (num)
  5. rezultat = 1
  6. while (not (aqueue.is_empty ())):
  7. num = AQUUE.DEQUEUE ()
  8. rezultat * = num
  9. print (rezultat)

Când funcția fun () este invocată prin trecerea lui n,

  • liniile 2 până la 4 en-coadă elementele de la 1 la n
  • liniile 5-8 găsește produsul acelor elemente scoțând-o în coadă unul câte unul

Cu aceasta, ajungem la sfârșitul acestui articol Structură de date coadă. Dacă ați înțeles și ați rulat codurile singuri, nu mai sunteți un începător al structurii de date a cozii.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui articol și vă vom răspunde cât mai curând posibil.

Pentru a obține cunoștințe aprofundate despre Python împreună cu diferitele sale aplicații, vă puteți înscrie pentru live cu suport 24/7 și acces pe viață.