Ano ang Struktur ng Data ng Queue Sa Python?



Magbibigay sa iyo ang artikulong ito ng isang detalyado at komprehensibong kaalaman tungkol sa Mga Structure ng Data ng Queue sa Python na may maraming mga halimbawa.

Tulad ng napag-aralan mo na tungkol sa kahalagahan ng Mga Istraktura ng Data sa nakaraang artikulo, Hinahayaang sumisid mismo sa paksa ng artikulo hal. Struktur ng Data ng pila. Tatalakayin ko ang mga sumusunod na paksa:

kung paano gamitin ang palitan sa java

Kailangan para sa Structure ng Data ng Queue

Ipagpalagay na nais mo para sa isang pelikula sa isang araw. Sa multiplex, ang mga tiket ay inisyu sa First-Come-First-Serve na batayan at ang mga tao ay nakatayo sa likod ng bawat isa na naghihintay para sa kanilang turno. Ano ang gagawin mo?? Dapat ay napunta ka sa likuran at nakatayo sa likuran ng huling taong naghihintay para sa tiket.





queue-data-structure

Dito, ang mga tao ay nakatayo isa sa likod ng isa pa at sila ay nagserbisyo batay sa First-In-First-Out (FIFO) mekanismo Ang nasabing pag-aayos ay kilala bilang a Pila.



Mga Halimbawa sa Pang-araw-araw na Buhay ng pila

Isaalang-alang natin ang ilang mga halimbawa kung saan nakikita natin ang uri ng pila na nagtatrabaho sa pang-araw-araw na buhay:

  • Sistema ng pagsagot sa telepono- Ang taong tumawag muna sa iyong gadget ay unang pinapasok.
  • Makinarya ng tseke - Sinusuri ang L bagahe na napanatili muna sa conveyer belt.
  • Mga sasakyan sa tulay ng toll-tax - Ang mga sasakyang darating nang maaga ay aalis muna.
  • Call Center - Ang mga system ng telepono ay gagamit ng Mga Queue, upang mahawakan ang mga taong tumatawag sa kanila nang maayos, hanggang sa isang kinatawan ng serbisyo ay libre.

Ang lahat ng mga halimbawang ito ay sumusunod First-In-Last-Out diskarte

Lumilikha ng Structure ng Data ng pila

Bukod sa mga pantulong na pagpapatakbo, maaari kong sabihin na ang pangunahing mga Operasyong posible sa Queue ay:



isa En-pila o magdagdag ng isang elemento sa dulo ng pila.

2. De-pila o alisin ang isang elemento mula sa harap ng pila

Ngayon, magsimula tayo sa pamamagitan ng paglikha ng Queue ng klase sa Python:

klase Queue: def __init __ (self, max_size): self .__ max_size = max_size self .__ element = [Wala] * sarili .__ max_size self .__ likuran = -1 sarili .__ harap = 0
  • max_size ay ang maximum na bilang ng mga elemento na inaasahan sa pila.
  • Ang mga elemento ng pila ay nakaimbak sa listahan ng sawa
  • Ipinapahiwatig ng likuran ang posisyon ng index ng huling elemento sa pila.
  • Ang likuran ay paunang kinuha na -1 sapagkat ang pila ay walang laman
  • Ipinapahiwatig ng harap ang posisyon ng unang elemento sa pila.
  • Ang harapan ay kinuha upang maging 0 sa una sapagkat ito ay palaging ituturo sa unang elemento ng pila

Enkeue

Ngayon, kapag sinusubukan mong magpalabas ng mga elemento sa pila, dapat mong tandaan ang mga sumusunod na puntos:

  • Kung may natitirang puwang sa pila o hindi ibig sabihin kung ang likuran ay katumbas ng max_size -1
  • Ituturo ng likuran ang huling elemento na ipinasok sa pila.

Kaya, ano ang magiging algorithm ??

#returns max_size of queue def get_max_size (self): return self .__ max_size #returns bool halaga kung ang pila ay puno o hindi, Totoo kung puno at Maling kung hindi man def ay_full (sarili): bumalik sa sarili .__ likuran == sarili .__ max_size-1 # pagsingit / pag-enqueue ng data sa pila kung hindi ito buong def enqueue (sarili, data): kung (self.is_full ()): i-print ('Puno ang pila. Walang posible na enqueue') iba pa: sarili .__ likuran + = 1 sarili. __elements [self .__ likuran] = data #display all the content of the queue def display (self): for i in range (0, self .__ rear + 1): print (self .__ elemento [i]) #Maaari mong gamitin ang sa ibaba __str __ () upang mai-print ang mga elemento ng bagay ng DS habang idi-debug ang def __str __ (sarili): msg = [] index = sarili .__ harap habang (index<=self.__rear): msg.append((str)(self.__elements[index])) index+=1 msg=' '.join(msg) msg='Queue data(Front to Rear): '+msg return msg

Ngayon, Kapag naisagawa mo ang sumusunod:

pila1 = Queue (5)

#Ipuno ang lahat ng kinakailangang (mga) elemento.

queue1.enqueue (“A”)

queue1.enqueue (“B”)

queue1.enqueue (“C”)

queue1.enqueue (“D”)

pila.enko ('E')

queue1.display ()

queue1.enqueue (“F”)

print (pila1)

Output:

SA

B

C

D

AY

Puno na ang pila. Walang posible na enqueue

Data ng pila (Harap sa Likod): A B C D E

De-Queue

Ngayon, habang naipasok / naipasok mo ang mga elemento sa pila, nais mong i-dequeue / tanggalin ang mga ito mula sa harap, kaya kailangan mong alagaan ang sumusunod:

  • May mga elemento sa pila tulad ng likuran ay hindi dapat katumbas ng -1.
  • Pangalawa, kailangan mong tandaan na ang mga elemento ay tinanggal mula sa harap kaya, pagkatapos ng pagtanggal sa harap ay dapat na madagdagan upang ituro ang susunod na harapan.
  • Hindi dapat ituro ng harapan ang pagtatapos ng pila ie katumbas ng max_size.

Kaya, ano ang magiging algorithm ??

#function upang suriin kung ang pila ay walang laman o hindi def is_empty (sarili): kung (sarili .__ likuran == - 1 o sarili .__ harap == sarili .__ max_size): ibalik ang Tama pa: ibalik ang Maling #function upang mag-deque ng isang elemento at bumalik ito def dequeue (sarili): kung (self.is_empty ()): i-print ('ang pila ay wala nang laman') iba pa: data = sarili .__ elemento [sarili .__ harap] sarili .__ harap + = 1 bumalik data #function upang ipakita ang mga elemento mula sa harap sa likuran kung ang pila ay hindi walang laman na pagpapakita ng def (sarili): kung (hindi sarili. ay_empty ()): para sa ako sa saklaw (sarili .__ harap, sarili .__ likuran + 1): i-print (sarili .__ elemento [i]) iba pa : print ('walang laman na pila')

Ngayon kapag naisagawa mo ang sumusunod:

pila1 = Queue (5)

#Ipuno ang lahat ng kinakailangang (mga) elemento

queue1.enqueue (“A”)

queue1.enqueue (“B”)

queue1.enqueue (“C”)

queue1.enqueue (“D”)

pila.enko ('E')

print (pila1)

disenyo ng mga pattern sa php na may halimbawa

#Deueue ang lahat ng (mga) kinakailangang elemento

i-print ('Dequeued:', queue1.dequeue ())

i-print ('Dequeued:', queue1.dequeue ())

i-print ('Dequeued:', queue1.dequeue ())

i-print ('Dequeued:', queue1.dequeue ())

i-print ('Dequeued:', queue1.dequeue ())

i-print ('Dequeued:', queue1.dequeue ())

#Ipakita ang lahat ng mga elemento sa pila.

queue1.display ()

Output:

Data ng pila (Harap sa Likod): A B C D E

Dequeued: A

Dequeued: B

Dequeued: C

Dequeued: D

Dequeued: E

wala na ang pila

Dequeued: Wala

walang laman ang pila

Mga aplikasyon ng pila

Tulad ng ngayon, naintindihan mo na ang mga pangunahing kaalaman sa pila. Ngayon upang sumisid nang mas malalim ay titingnan namin ang ilan sa mga application nito.

  • Halimbawa 1:

I-print ang pila sa Windows gumagamit ng isang pila upang maiimbak ang lahat ng mga aktibo at nakabinbing mga trabaho sa pag-print. Kapag nais naming mag-print ng mga dokumento, naglalabas kami ng mga print print sunud-sunod. Batay sa mga print na utos, ang mga dokumento ay makakapila sa linya ng pag-print. Kapag handa na ang printer, ipapadala muna ang dokumento sa unang labas upang mai-print ito.

Ipagpalagay na naglabas ka ng mga print print para sa 3 mga dokumento sa order doc1, na sinusundan ng doc2 at doc3.
Mapapuno ang pila sa naka-print tulad ng ipinakita sa ibaba:

doc-n, kung saan ang dokumento ay ang dokumento na ipinadala para sa pagpi-print at n, ay ang bilang ng mga pahina sa dokumento. Halimbawa, nangangahulugan ang doc2-10 na ang doc2 ay dapat mai-print at mayroon itong 10 mga pahina. Narito ang isang code na simulate ang pagpapatakbo ng naka-print na queue. Dumaan sa code at obserbahan kung paano ginagamit ang pila sa pagpapatupad na ito.

klase Queue: def __init __ (self, max_size): self .__ max_size = max_size self .__ element = [Wala] * self .__ max_size self .__ likuran = -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 Maling def enqueue (sarili, data): kung (self.is_full ()): print ('Puno ang pila !!!') iba pa: sarili .__ likuran + = 1 sarili .__ elemento [sarili .__ likuran] = data def dequeue (sarili): kung (self.is_empty ()): i-print ('Walang laman ang pila! !! ') iba pa: data = sarili .__ elemento [sarili .__ harap] sarili .__ harap + = 1 pagbalik ng data def display (sarili): para sa saklaw ng index (sarili .__ harap, sarili .__ likuran + 1): i-print (sarili .__ elemento [index]) def get_max_size (self): return self .__ max_size #Maaari mong gamitin ang nasa ibaba __str __ () upang mai-print ang mga elemento ng DS object habang #debugging def __str __ (self): msg = [] index = self .__ harap habang (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()

Output:

ipinadala ang doc1-5 para sa pagpi-print

ipinadala ang doc2-3 para sa pagpi-print

ipinadala ang doc3-6 para sa pagpi-print

naka-print ang doc1-5

Natitirang blg. ng mga pahina sa printer: 7

naka-print ang doc2-3

Natitirang blg. ng mga pahina sa printer: 4

Hindi mai-print ang doc3. Walang sapat na mga pahina sa printer

  • Halimbawa 2:

Subukan nating maunawaan ang isa pang halimbawa na gumagamit ng istraktura ng data ng Queue. Maaari mo bang subukang unawain ang code at sabihin kung ano ang ginagawa ng sumusunod na pagpapaandar?

  1. def masaya (n):
  2. aqueue = Queue (100)
  3. para sa saklaw na numero (1, n + 1):
  4. enqueue (num)
  5. resulta = 1
  6. habang (hindi (aqueue.is_empty ())):
  7. num = AQUUE.DEQUEUE ()
  8. resulta * = num
  9. i-print (resulta)

Kapag ang saya sa pagpapaandar () ay tinawag sa pamamagitan ng pagdaan n,

  • linya 2 hanggang 4 na en-pila ang mga elemento mula 1 hanggang n
  • hahanapin ng mga linya 5 hanggang 8 ang produkto ng mga elementong iyon sa pamamagitan ng de-pila nang paisa-isa

Sa pamamagitan nito, natapos namin ang artikulong ito ng Struktur ng Queue Data. Kung matagumpay mong naintindihan at pinatakbo ang mga code sa pamamagitan ng iyong sarili hindi ka na isang baguhan sa Queue Data Structure.

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento ng artikulong ito at babalikan ka namin sa lalong madaling panahon.

Upang makakuha ng malalim na kaalaman sa Python kasama ang iba't ibang mga application nito, maaari kang magpatala nang live na may 24/7 na suporta at habambuhay na pag-access.