Kas yra „Python“ eilės duomenų struktūra?



Šis straipsnis suteiks jums išsamių ir išsamių žinių apie „Python“ eilės duomenų struktūras su daugybe pavyzdžių.

Kaip jūs jau tyrėte apie duomenų struktūrų svarbą ankstesniame straipsnyje, leidžiame pasinerti tiesiai į straipsnio temą, t. Y. Eilės duomenų struktūrą. Aptarsiu šias temas:

Eilės duomenų struktūros poreikis

Tarkime, kad vieną dieną norite filmo. Multiplexe bilietai buvo išduodami pagal principą „Pirmas ateik - pirmas - tarnauti“ ir žmonės stovėjo vienas už kito ir laukė savo eilės. Taigi, ką darysi ?? Jūs tikriausiai nuėjote į galą ir atsistojote už paskutinio bilieto laukiančio žmogaus.





queue-data-structure

Čia žmonės stovi vienas už kito ir jiems aptarnaujama remiantis „First-in-first-out“ (FIFO) mechanizmas. Toks susitarimas yra žinomas kaip a Eilė.



Kasdienio gyvenimo eilės pavyzdžiai

Panagrinėkime keletą pavyzdžių, kai kasdieniame gyvenime dirbame eilės tipo:

  • Telefono atsiliepimo sistema- Asmuo, kuris pirmiausia skambina naudodamas jūsų programėlę, pirmiausia dalyvauja.
  • Bagažo tikrinimo aparatas - Patikrinkite bagažą, kuris pirmiausia buvo laikomas ant konvejerio diržo.
  • Transporto priemonės ant rinkliavos mokesčio tilto - Anksti atvažiuojančios transporto priemonės išvažiuoja pirmos.
  • Skambučių centras - telefono sistemos naudos eiles, kad sutvarkytų žmones, kurie jiems skambina, kol paslaugų atstovas bus laisvas.

Toliau pateikiami visi šie pavyzdžiai Pirmas-paskutinis-išėjęs strategija.

Eilės duomenų struktūros sukūrimas

Be papildomų operacijų, galiu pasakyti, kad pagrindinės galimos operacijos eilėje yra šios:



vienas. Eilė arba pridėkite elementą prie eilės pabaigos.

2. Iš eilės arba pašalinkite elementą iš eilės priekio

Pradėkime nuo „Class Queue“ kūrimo „Python“:

klasės eilė: def __init __ (self, max_size): self .__ max_size = max_size self .__ elements = [Nėra] * self .__ max_size self .__ rear = -1 self .__ front = 0
  • max_size yra didžiausias laukiamų elementų skaičius eilėje.
  • Eilės elementai saugomi pitonų sąraše
  • užpakalinė rodo paskutinio eilės elemento indekso padėtį.
  • Iš pradžių laikoma, kad galinė dalis yra -1, nes eilė tuščia
  • Priekyje nurodoma pirmojo eilės elemento padėtis.
  • Iš pradžių laikoma, kad priekinė dalis yra 0, nes ji visada nurodys pirmąjį eilės elementą

Enqueue

Dabar, kai bandote įtraukti elementus į eilę, turite prisiminti šiuos dalykus:

  • Ar eilėje liko vietos, ar ne, t. Y. Jei galinė vertė lygi max_size -1
  • Galinė bus nukreipta į paskutinį eilėje įterptą elementą.

Taigi, koks bus algoritmas?

#returns max_size of que def get_max_size (self): return self .__ max_size #returns Bool value, ar eilė yra pilna, ar ne, Tiesa, jei pilna ir Klaidinga, kitaip def is_full (self): grąžinti save .__ rear == self .__ max_size-1 # įterpia / surašo duomenis į eilę, jei ji nėra pilna def enqueue (savęs, duomenų): if (self.is_full ()): print („Eilė pilna. Neįmanoma pastatyti eilės“) dar: savarankiškai .__ galinė + = 1 sav. __elements [self .__ rear] = data # parodyti visą eilės def ekrano turinį (savarankiškai): i diapazone (0, self .__ galinis + 1): spausdinti (self .__ elementai [i]) # Galite naudoti žemiau __str __ () spausdinti DS objekto elementus derinant 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

Dabar, kai vykdote šiuos veiksmus:

1 eilė = eilė (5)

#Surinkite visus reikiamus elementus.

queue1.enqueue („A“)

queue1.enqueue („B“)

queue1.enqueue („C“)

klasės vs sąsaja java

queue1.enqueue („D“)

queue1.enqueue („E“)

queue1.display ()

queue1.enqueue („F“)

spausdinti (1 eilė)

Išvestis:

Į

B

C

D

IS

Eilė pilna. Negalima pastatyti jokios enqueue

Eilės duomenys (iš priekio į galą): A B C D E

Iš eilės

Dabar, kai įterpėte / įtraukėte elementus į eilę, norite juos pašalinti / ištrinti iš priekio, todėl turite pasirūpinti šiais veiksmais:

  • Eilėje yra elementų, t. Y. Galas neturėtų būti lygus -1.
  • Antra, turite atsiminti, kad elementai ištrinami iš priekio, todėl ištrynus priekį, reikia didinti iki kito priekio.
  • Priekis neturėtų nukreipti eilės pabaigos, t. Y. Lygus max_size.

Taigi, koks bus algoritmas?

# function patikrinti, ar eilė tuščia, ar ne def is_empty (self): if (self .__ rear == - 1 arba self .__ front == self .__ max_size): return True else: return False # function to deque element and return tai def dequeue (savarankiškai): if (self.is_empty ()): print ('eilė jau tuščia') dar: data = self .__ elementai [self .__ front] self .__ front + = 1 grąžina duomenis # function elementams rodyti iš iš priekio į galą, jei eilė nėra tuščia, def rodymas (savarankiškai): jei (ne savarankiškas. yra neveikiantis ()): i diapazone (savarankiškas .__ priekis, sav.. galas + 1): spausdinimas (sav. _ elementai [i]) dar : spausdinti ('tuščia eilė')

Dabar, kai vykdote šiuos veiksmus:

1 eilė = eilė (5)

#Enqueue visus reikiamus elementus

queue1.enqueue („A“)

queue1.enqueue („B“)

queue1.enqueue („C“)

queue1.enqueue („D“)

queue1.enqueue („E“)

spausdinti (1 eilė)

#Dequeue visi reikalingi elementai

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

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

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

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

kas yra aidas php

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

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

# Parodykite visus eilės elementus.

queue1.display ()

Išvestis:

Eilės duomenys (iš priekio į galą): A B C D E

Nuovargis: A

Nuovargis: B

Nuovargis: C.

Nuovargis: D

Nuovargis: E

eilė jau tuščia

Pašalintas: Nėra

tuščia eilė

Eilės programos

Šiuo metu jūs jau supratote eilės pagrindus. Dabar, norėdami pasinerti giliau, panagrinėsime kai kurias jo programas.

  • 1 pavyzdys:

Spausdinimo eilė sistemoje „Windows“ naudoja eilę, kad išsaugotų visas aktyvias ir laukiančias spausdinimo užduotis. Kai norime spausdinti dokumentus, vienas po kito išleidžiame spausdinimo komandas. Remiantis spausdinimo komandomis, dokumentai bus išrikiuoti spausdinimo eilėje. Kai spausdintuvas bus paruoštas, dokumentas bus išsiųstas pirmas iš pirmojo, kad jis būtų atspausdintas.

Tarkime, kad jūs išdavėte spausdinimo komandas 3 dokumentams, esantiems eilėje doc1, po jų - doc2 ir doc3.
Spausdinimo eilė bus užpildyta taip, kaip parodyta žemiau:

doc-n, kur doc yra dokumentas, išsiųstas spausdinti, ir n, yra dokumento puslapių skaičius. Pavyzdžiui, doc2-10 reiškia, kad turi būti atspausdintas doc2 ir jis turi 10 puslapių. Čia yra kodas, imituojantis spausdinimo eilės veikimą. Peržiūrėkite kodą ir stebėkite, kaip eilė naudojama įgyvendinant.

klasės eilė: def __init __ (self, max_size): self .__ max_size = max_size self .__ elements = [Nėra] * 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 ()): spausdinti ('Eilė pilna !!!') dar: savarankiškai .__ galinė + = 1 savaime .__ elementai [savaime .__ gale] = duomenų def. !! ') else: data = self .__ elements [self .__ front] self .__ front + = 1 return data def display (self): indeksui diapazone (self .__ front, self .__ rear + 1): print (self .__ elements [index]) def get_max_size (self): return self .__ max_size # Galite naudoti toliau pateiktą __str __ () DS objekto elementams spausdinti, o #debugging def __str __ (self): msg = [] index = self .__ front (indeksas<=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()

Išvestis:

doc1-5 išsiųstas spausdinti

doc2-3 išsiųstas spausdinti

doc3-6 išsiųstas spausdinti

atspausdinta doc1-5

Likęs Nr. puslapių spausdintuve: 7

atspausdinta doc2-3

Likęs Nr. puslapių spausdintuve: 4

Nepavyko atsispausdinti doc3. Nepakanka puslapių spausdintuve

  • 2 pavyzdys:

Pabandykime suprasti kitą pavyzdį, kuriame naudojama eilės duomenų struktūra. Ar galite pabandyti suprasti kodą ir pasakyti, ką daro ši funkcija?

  1. def įdomus (n):
  2. aqueue = eilė (100)
  3. už skaičių diapazone (1, n + 1):
  4. enqueue (skaičius)
  5. rezultatas = 1
  6. o (ne (aqueue.is_empty ())):
  7. skaičius = AQUUE.DEQUEUE ()
  8. rezultatas * = skaičius
  9. spausdinti (rezultatas)

Kai funkcija fun () iškviečiama perduodant n,

  • 2–4 eilutės pateikia eilės elementus nuo 1 iki n
  • 5–8 eilutės randa tų elementų sandaugą, kai viena po kitos eina į eilę

Tuo mes baigėme šį eilės duomenų struktūros straipsnį. Jei patys sėkmingai supratote ir paleidote kodus, jūs nebesate naujokas eilės duomenų struktūroje.

Turite mums klausimą? Prašau paminėti tai šio straipsnio komentarų skiltyje ir kuo greičiau susisieksime su jumis.

Norėdami gauti išsamių žinių apie „Python“ kartu su įvairiomis jo programomis, galite užsiregistruoti tiesiogiai su parą visą parą ir visą gyvenimą.