Mis on Pythonis järjekorraandmete struktuur?



See artikkel pakub üksikasjalikke ja põhjalikke teadmisi Pythoni järjekorraandmete struktuuride kohta koos paljude näidetega.

Nagu te eelmises artiklis andmekonstruktsioonide olulisuse kohta juba uurisite, laseb sukelduda artikli teemasse, st järjekorra andmete struktuuri. Ma arutlen järgmistel teemadel:

Vajadus järjekorra andmete struktuuri järele

Oletame, et soovite ühel päeval filmi. Multipleksis väljastati piletid põhimõttel 'Esimene-tulge-esimene-teenin' ja inimesed seisid üksteise taga ja ootasid oma korda. Mida sa siis teed ?? Olete vist läinud taha ja seisnud viimase piletit ootava inimese taga.





queue-data-structure

Siin seisavad inimesed üksteise taga ja neid hooldatakse Esimene-esimeses-väljas (FIFO) mehhanism. Sellist korraldust tuntakse kui Järjekord.



Igapäevaelu näited järjekorrast

Vaatleme mõningaid näiteid, kus näeme igapäevaelus töötavat järjekorra tüüpi:

  • Telefonivastaja- Inimene, kes helistab teie vidinal esimesena, osaleb kõigepealt.
  • Pagasikontrolli masin - Kontrollige kõigepealt konveierilindil hoitavat pagasit.
  • Sõidukid teemaksu sillal - Varakult saabuvad sõidukid lahkuvad esimesena.
  • Kõnekeskus - telefonisüsteemid kasutavad järjekordi, et hoida inimesi neile helistamas, kuni teenindusesindaja on vaba.

Kõik need näited järgnevad Esimene-viimane-väljas strateegia.

Järjekorra andmete struktuuri loomine

Lisaks täiendavatele toimingutele võin öelda, et peamised võimalikud toimingud järjekorras on järgmised:



üks. Järjekord või lisage järjekorra lõppu element.

2. Järjekorrast eemaldamine või eemaldage järjekorra esiosast element

Alustame nüüd klassi Queue loomisega Pythonis:

klassi järjekord: def __init __ (mina, max_size): ise .__ max_size = max_size self .__ elemendid = [Puudub] * ise .__ max_size self .__ taga = -1 ise .__ front = 0
  • max_size on järjekorras oodatavate elementide maksimaalne arv.
  • Järjekorra elemendid salvestatakse pythoni loendisse
  • tagumine tähistab järjekorra viimase elemendi indeksi positsiooni.
  • Esialgu võetakse tagaosa -1, kuna järjekord on tühi
  • Esikülg näitab järjekorra esimese elemendi positsiooni.
  • Esikülg on algselt 0, kuna see osutab alati järjekorra esimesele elemendile

Lummata

Nüüd, kui proovite elemente järjekorda meelitada, peate meeles pidama järgmisi punkte:

mis on Java-s muutumatu objekt
  • Kas järjekorras on ruumi või mitte, st kui tagumine võrdub max_size -1
  • Tagumine osutab järjekorda viimati sisestatud elemendile.

Mis saab siis algoritm ??

#returns queue max_size def get_max_size (self): return self .__ max_size #returns bool value for queue is full or not, True if full and False vastasel juhul def is_full (self): return self .__ rear == self .__ max_size-1 # lisab / järjekorda andmed järjekorda, kui see pole täielik def enqueue (ise, andmed): if (self.is_full ()): print ('Järjekord on täis. Enqueue pole võimalik') muu: ise .__ taga + = 1 ise. __elements [self .__ rear] = data # kuvab kogu järjekorra sisu (ise) sisu: i jaoks vahemikus (0, self .__ taga + 1): print (self .__ elemendid [i]) # Võite kasutada all __str __ () DS-objekti elementide printimiseks def __str __ (self) silumisel: msg = [] index = self .__ front while (register<=self.__rear): msg.append((str)(self.__elements[index])) index+=1 msg=' '.join(msg) msg='Queue data(Front to Rear): '+msg return msg

Nüüd, kui täidate järgmist:

1. järjekord = Järjekord (5)

#Vajutage kõik vajalikud elemendid.

queue1.enqueue (“A”)

queue1.enqueue (“B”)

queue1.enqueue (“C”)

queue1.enqueue (“D”)

queue1.enqueue („E”)

queue1.display ()

queue1.enqueue (“F”)

print (järjekord1)

Väljund:

TO

B

C

D

ON

Järjekord on täis. Ükski võlu pole võimalik

Järjekorra andmed (eest tagant): A B C D E

Järjekord

Nüüd, kui olete elemendid järjekorda sisestanud / paigutanud, soovite need esiosast dekodeerida / kustutada, seega peate hoolitsema järgmise eest:

  • Järjekorras on elemente, st tagumine ei tohiks olla võrdne -1-ga.
  • Teiseks peate meeles pidama, et kuna elemendid kustutatakse esiosast, tuleb pärast esiosa kustutamist suurendada järgmise esipunkti suunas.
  • Esiosa ei tohiks näidata järjekorra lõppu, st võrdne max_size-ga.

Mis saab siis algoritm ??

#funktsioon, et kontrollida, kas järjekord on tühi või mitte, def is_empty (self): if (self .__ rear == - 1 või self .__ front == self .__ max_size): return True else: return False # function element deque and return see def dequeue (self): if (self.is_empty ()): print ('järjekord on juba tühi') muu: data = self .__ elemendid [self .__ front] self .__ front + = 1 tagastavad andmed # function elementide kuvamiseks ees ja taga, kui järjekord ei ole tühi, def kuva (ise): kui (mitte ise. : print ('tühi järjekord')

Nüüd, kui täidate järgmist:

1. järjekord = Järjekord (5)

#Enqueue kõik nõutavad elemendid

queue1.enqueue (“A”)

queue1.enqueue (“B”)

queue1.enqueue (“C”)

queue1.enqueue (“D”)

queue1.enqueue (“E”)

print (järjekord1)

mis on püthoni konstruktor

#Dequeue kõik vajalikud elemendid

print („Dequeued:“, järjekord1.dequeue ())

print („Dequeued:“, järjekord1.dequeue ())

print („Dequeued:“, järjekord1.dequeue ())

print („Dequeued:“, järjekord1.dequeue ())

print („Dequeued:“, järjekord1.dequeue ())

print („Dequeued:“, järjekord1.dequeue ())

#Kuva kõik järjekorras olevad elemendid.

queue1.display ()

Väljund:

Järjekorra andmed (eest tagant): A B C D E

Dequeued: A

Dequeued: B

Dequeued: C

Dequeued: D

Dequeued: E

järjekord on juba tühi

Dequeued: puudub

tühi järjekord

Järjekorra rakendused

Praeguse seisuga olete järjekorra põhitõdedest juba aru saanud. Nüüd sukeldumiseks uurime mõningaid selle rakendusi.

  • Näide 1:

Printimisjärjekord Windowsis kasutab kõigi aktiivsete ja ootel olevate prinditööde salvestamiseks järjekorda. Kui tahame dokumente printida, väljastame üksteise järel printimiskäsud. Printimiskäskude põhjal paigutatakse dokumendid prindijärjekorda. Kui printer on valmis, saadetakse dokument printimiseks esimene ja esimene välja.

Oletame, et olete välja andnud trükikäsklused 3 dokumendile järjekorras doc1, millele järgnevad doc2 ja doc3.
Prindijärjekord täidetakse järgmiselt:

doc-n, kus doc on printimiseks saadetud dokument ja n, on dokumendi lehtede arv. Näiteks tähendab see, et doc2-10 tuleb printida doc2 ja sellel on 10 lehekülge. Siin on kood, mis simuleerib printimisjärjekorra toimimist. Vaadake kood läbi ja jälgige, kuidas järjekorda selles rakenduses kasutatakse.

klassi järjekord: def __init __ (mina, max_size): ise .__ max_size = max_size self .__ elemendid = [pole] * ise .__ max_size ise .__ taga = -1 ise .__ front = 0 def is_full (ise): kui (ise .__ taga = = 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 ('Järjekord on täis !!!') muu: ise .__ taga + = 1 ise .__ elemendid [ise .__ taga] = andmete def deueue (ise): kui (ise.is_tühi ()): print ('Järjekord on tühi! !! ') else: data = self .__ elements [self .__ front] self .__ front + = 1 return data def display (self): vahemikus oleva indeksi jaoks (self .__ front, self .__ rear + 1): print (self .__ elements [register]) def get_max_size (ise): return self .__ max_size # DS-objekti elementide printimiseks võite kasutada järgmist __str __ (): #debugging def __str __ (self): msg = [] index = self .__ front while (indeks<=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()

Väljund:

doc1-5 saadeti printimiseks

doc2-3 saadeti printimiseks

doc3-6 saadeti printimiseks

doc1-5 trükitud

Ülejäänud nr. lehekülgi printeris: 7

doc2-3 trükitud

Ülejäänud nr. lehekülgi printeris: 4

Doc3 ei õnnestunud printida. Printeris pole piisavalt lehti

  • Näide 2:

Proovime mõista veel ühte näidet, mis kasutab järjekorra andmestruktuuri. Kas saate proovida koodi mõista ja öelda, mida järgmine funktsioon teeb?

  1. def lõbus (n):
  2. aqueue = Järjekord (100)
  3. arvu vahemikus (1, n + 1):
  4. enqueue (arv)
  5. tulemus = 1
  6. while (mitte (aqueue.is_empty ())):
  7. arv = AQUUE.DEQUEUE ()
  8. tulemus * = arv
  9. print (tulemus)

Kui funktsiooni fun () abil käivitatakse n,

  • read 2 kuni 4 järjestavad elemendid 1 kuni n
  • read 5–8 leiavad nende elementide korrutise, eraldades selle ükshaaval järjekorda

Sellega jõuame selle järjekorra andmete struktuuri artikli lõppu. Kui saite ise koodidest edukalt aru ja käitasite, ei ole te enam järjekorra andmete struktuuri algaja.

Kas teil on meile küsimus? Palun mainige seda selle artikli kommentaaride jaotises ja võtame teiega ühendust niipea kui võimalik.

Põhjalike teadmiste saamiseks Pythoni ja selle erinevate rakenduste kohta saate registreeruda otseülekandeks 24/7 toe ja ligipääsuga kogu eluks.