esittely
Tietorakenteet luovat perustan kestäville sovelluksille yksinkertaisten kokonaislukujen tallentamisesta monimutkaisten työnkulkujen hallintaan. Heidän joukossaan on jono esiintyy usein sekä kiehtovana että kaikkialla esiintyvänä. Ajattele sitä – a linja pankissa, vuoroasi odottaminen pikaruokatiskillä tai tehtävien puskurointi tietokonejärjestelmässä – kaikki nämä skenaariot resonoivat jonon mekaniikan kanssa.
Jonon ensimmäinen henkilö palvellaan ensin, ja uudet tulokkaat liittyvät lopussa. Tämä on tosielämän esimerkki jonosta toiminnassa!
Kehittäjille, varsinkin Pythonissa, jonot eivät ole vain teoreettisia rakenteita tietojenkäsittelytieteen oppikirjasta. Ne muodostavat taustalla olevan arkkitehtuurin monissa sovelluksissa. Jonot ovat korvaamaton rooli tulostimen tehtävien hallinnasta saumattomasti suorien lähetysten tietovirtojen varmistamiseen.
Tässä oppaassa perehdymme syvälle jonojen käsitteeseen, tutkimme niiden ominaisuuksia, todellisia sovelluksia ja mikä tärkeintä, kuinka ne voidaan ottaa tehokkaasti käyttöön ja käyttää Pythonissa.
Mikä on jonotietorakenne?
Tietorakenteiden maisemissa liikkuessamme kohtaamme usein säilöjä, joilla on erilliset säännöt tiedon syöttämiselle ja haulle. Näistä mm jono erottuu tyylikkyydestään ja yksinkertaisuudestaan.
FIFO-periaate
Jono on pohjimmiltaan lineaarinen tietorakenne, joka noudattaa First-in-First-Out (FIFO) periaate. Tämä tarkoittaa, että ensimmäinen jonoon lisätty elementti poistetaan ensimmäisenä. Vertaaksesi sitä suhteelliseen skenaarioon: harkitse asiakasjonoa lipputiskillä. Ensimmäisenä saapuva henkilö saa lippunsa ensin, ja kaikki myöhemmät saapuvat joutuvat lopussa odottamaan vuoroaan.
Huomautus: Jonolla on kaksi päätä - takana ja edessä. Etuosa osoittaa, mistä elementit poistetaan, ja takaosa osoittaa, mihin uusia elementtejä lisätään.
Perusjonon toiminnot
-
Jono – Teko lisää elementti loppuun asti (takaosa) jonosta.
-
Poistaa jonosta – Teko poistamalla elementti kohteesta etuosa jonosta.
-
Kurkista tai Edessä – Monissa tilanteissa on hyödyllistä vain tarkkailla etuelementtiä irrottamatta sitä. Tämä operaatio antaa meille mahdollisuuden tehdä juuri sen.
-
On tyhjä – Toiminto, joka auttaa määrittämään, onko jonossa elementtejä. Tämä voi olla ratkaisevan tärkeää skenaarioissa, joissa toiminnot ovat riippuvaisia jonosta, jolla on tietoja.
Huomautus: Vaikka joidenkin jonojen koko on rajoitettu (rajoitetut jonot), toiset voivat mahdollisesti kasvaa niin kauan kuin järjestelmämuisti sallii (rajoittamattomat jonot).
Jonojen yksinkertaisuus ja selkeät toimintasäännöt tekevät niistä ihanteellisia erilaisiin ohjelmistokehityksen sovelluksiin, erityisesti säännöllistä ja systemaattista käsittelyä vaativissa skenaarioissa.
Teorian ymmärtäminen on kuitenkin vasta ensimmäinen askel. Kun siirrymme eteenpäin, syvennymme käytännön näkökohtiin, havainnollistaen kuinka toteuttaa jonoja Pythonissa.
Jonojen käyttöönotto Pythonissa – Listat vs. Deque vs. Queue -moduuli
Python, jossa on rikas standardikirjasto ja käyttäjäystävällinen syntaksi, tarjoaa useita mekanismeja jonojen toteuttamiseen ja käsittelyyn. Vaikka kaikki palvelevat jononhallinnan perustarkoitusta, niissä on vivahteitaan, etujaan ja mahdollisia sudenkuoppiaan. Tarkastellaan jokaista lähestymistapaa havainnollistaen sen mekaniikkaa ja parhaita käyttötapauksia.
Huomautus: Tarkista aina jonosi tila ennen toimintojen suorittamista. Tarkista esimerkiksi ennen jonosta poistamista, onko jono tyhjä virheiden välttämiseksi. Samoin rajoitettujen jonojen kohdalla varmista, että tilaa on ennen jonoon asettamista.
Python-luetteloiden käyttäminen jonojen toteuttamiseen
Pythonin sisäänrakennettujen luetteloiden käyttäminen jonojen toteuttamiseen on intuitiivista ja yksinkertaista. Ulkoisia kirjastoja tai monimutkaisia tietorakenteita ei tarvita. Tämä lähestymistapa ei kuitenkaan välttämättä ole tehokas suurille tietojoukoille. Elementin poistaminen luettelon alusta (pop(0)
) vie lineaarista aikaa, mikä voi aiheuttaa suorituskykyongelmia.
Huomautus: Vaihda sovelluksiin, jotka vaativat korkeaa suorituskykyä tai jotka käsittelevät paljon dataa collections.deque
jatkuvan ajan monimutkaisuuden vuoksi sekä jonossa että jonosta poistamisessa.
Aloitetaan luomalla luettelo, joka edustaa jonoamme:
queue = []
Elementtien lisääminen jonon loppuun (jono) ei ole muuta kuin niiden lisääminen luetteloon:
queue.append('A')
queue.append('B')
queue.append('C')
print(queue)
Myös elementin poistaminen jonon edestä (jonosta poistaminen) vastaa vain luettelon ensimmäisen elementin poistamista:
queue.pop(0)
print(queue)
Käyttäminen kokoelmat.deque toteuttaa jonoja
Tämä lähestymistapa on erittäin tehokas mm deque
toteutetaan käyttämällä a kaksinkertaisesti linkitetty luettelo. Se tukee nopeita O(1) lisäyksiä ja ponnahduksia molemmista päistä. Tämän lähestymistavan haittapuoli on, että se on hieman vähemmän intuitiivinen aloittelijoille.
Ensin tuomme deque
objekti collections
moduuli ja alusta jonomme:
from collections import deque queue = deque()
Nyt voimme käyttää append()
menetelmä elementtien jonottamiseksi ja popleft()
menetelmä elementtien poistamiseksi jonosta:
Tutustu käytännönläheiseen, käytännölliseen Gitin oppimisoppaaseemme, jossa on parhaat käytännöt, alan hyväksymät standardit ja mukana tuleva huijauslehti. Lopeta Git-komentojen googlailu ja oikeastaan oppia se!
queue.append('A')
queue.append('B')
queue.append('C')
print(queue) queue.popleft()
print(queue)
Pythonin käyttäminen jono Moduuli jonojen toteuttamiseen
- queue
Pythonin vakiokirjaston moduuli tarjoaa erikoistuneemman lähestymistavan jonojen hallintaan eri käyttötapauksissa:
- SimpleQueue – FIFO-perusjono
- LifoQueue – LIFO-jono, lähinnä pino
- prioriteettijono – Elementit poistetaan jonosta niille määritetyn prioriteetin perusteella
Huomautus: Valitse queue
moduuli, joka on suunniteltu käytettäväksi lanka turvassa. Tämä varmistaa, että samanaikaiset toiminnot jonossa eivät johda arvaamattomiin tuloksiin.
Tämä lähestymistapa on loistava, koska se on suunniteltu nimenomaan jonotoimintoihin. Mutta ollakseni täysin rehellinen, se saattaa olla liioittelua yksinkertaisissa skenaarioissa.
Nyt aletaan käyttää queue
moduuli tuomalla se projektiimme:
import queue
Koska toteutamme yksinkertaisen FIFO-jonon, alustamme sen käyttämällä SimpleQueue()
rakentaja:
q = queue.SimpleQueue()
Jonotus- ja purkutoiminnot toteutetaan käyttämällä put()
ja get()
menetelmät queue
moduuli:
q.put('A')
q.put('B')
q.put('C')
print(q.queue) q.get()
print(q.queue)
Huomautus: Jonotoiminnot voivat aiheuttaa poikkeuksia, jotka voivat häiritä sovelluksesi kulkua, jos niitä ei käsitellä. Tämän estämiseksi kääri jonotoiminnot sisään try-except
lohkot.
Käsittele esimerkiksi queue.Empty
poikkeus työskennellessäsi kanssa queue
moduuli:
import queue q = queue.SimpleQueue() try: item = q.get_nowait()
except queue.Empty: print("Queue is empty!")
Mikä toteutus valita?
Pythonissa valitsemasi jonototeutuksen tulee vastata sovelluksesi vaatimuksia. Jos käsittelet suuria määriä dataa tai tarvitset optimoitua suorituskykyä, collections.deque
on vakuuttava valinta. Kuitenkin monisäikeisissä sovelluksissa tai kun prioriteetit tulevat esiin, queue
moduuli tarjoaa kestäviä ratkaisuja. Python-luettelot saattavat riittää nopeisiin komentosarjoihin tai kun olet vasta aloittamassa, mutta ole aina varovainen mahdollisten suorituskyvyn sudenkuoppien suhteen.
Huomautus: Pyörän keksiminen uudelleen toteuttamalla mukautettuja jonotoimintoja, kun Python tarjoaa jo tehokkaita sisäänrakennettuja ratkaisuja.
Ennen kuin luot mukautettuja ratkaisuja, tutustu Pythonin sisäänrakennettuun tarjontaan, kuten deque
ja queue
moduuli. Useimmiten ne vastaavat monenlaisia vaatimuksia, mikä säästää aikaa ja vähentää mahdollisia virheitä.
Sukella syvemmälle: edistyneet jonokonseptit Pythonissa
Python tarjoaa joukon edistyneitä käsitteitä ja tekniikoita jonopohjaisten toimintojen tarkentamiseen ja optimointiin niille, jotka ovat ymmärtäneet jonojen perusmekaniikat ja haluavat syventyä. Selvitetään joitain näistä hienostuneista näkökohdista, mikä antaa sinulle arsenaalin työkaluja monimutkaisempiin skenaarioihin.
Kaksipäiset jonot mistä
Kun olemme aiemmin tutkineet deque
FIFO-jonona se tukee myös LIFO-toimintoja (Last-In-First-Out). Sen avulla voit lisätä tai pop-elementtejä molemmista päistä O(1)-monimutkaisuudella:
from collections import deque dq = deque()
dq.appendleft('A') dq.append('B') dq.pop() dq.popleft()
PriorityQueu toiminnassa
Yksinkertaisen FIFO-jonon käyttäminen, kun käsittelyjärjestys on riippuvainen tärkeydestä, voi johtaa tehottomuuteen tai ei-toivottuihin tuloksiin, joten jos hakemuksesi edellyttää tiettyjen elementtien käsittelyä ennen muita joidenkin kriteerien perusteella, käytä PriorityQueue
. Tämä varmistaa, että elementit käsitellään niille asetettujen prioriteettien mukaisesti.
Katso, kuinka asetamme prioriteetit jonoon lisäämillemme elementeille. Tämä edellyttää, että välitämme tupelin argumenttina put()
menetelmä. Lukion tulee sisältää prioriteetti ensimmäisenä elementtinä ja todellinen arvo toisena elementtinä:
import queue pq = queue.PriorityQueue()
pq.put((2, "Task B"))
pq.put((1, "Task A")) pq.put((3, "Task C")) while not pq.empty(): _, task = pq.get() print(f"Processing: {task}")
Tämä antaa meille seuraavan:
Processing: Task A
Processing: Task B
Processing: Task C
Huomaa, kuinka lisäsimme elementtejä eri järjestyksessä kuin se, joka on tallennettu jonoon. Tämä johtuu prioriteeteista, jotka olemme määrittäneet put()
menetelmää lisättäessä elementtejä prioriteettijonoon.
Pyöreän jonon käyttöönotto
Pyöreä jono (tai rengaspuskuri) on kehittynyt tietorakenne, jossa viimeinen elementti on yhdistetty ensimmäiseen varmistaen pyöreän virtauksen. deque
voi jäljitellä tätä käyttäytymistä käyttämällä sen maxlen
omaisuus:
from collections import deque circular_queue = deque(maxlen=3)
circular_queue.append(1)
circular_queue.append(2)
circular_queue.append(3) circular_queue.append(4)
print(circular_queue)
Yhteenveto
Jonot, jotka ovat perustavanlaatuisia mutta tehokkaita, löytävät olemuksensa erilaisissa todellisissa sovelluksissa ja laskentaongelmissa. Jonojen vaikutukset ovat kauaskantoisia aina käyttöjärjestelmien tehtävien ajoituksesta tulostuksen taustatulostuksen tai web-palvelinpyyntöjen tietovirran hallintaan.
Python tuo pöytään rikkaan paletin työkaluja ja kirjastoja jonojen käsittelyyn. Yksinkertaisista luettelopohjaisista jonoista nopeita komentosarjoja varten erittäin tehokkaisiin deque
suorituskykykriittisissä sovelluksissa kieli todella palvelee erilaisia tarpeita.
- SEO-pohjainen sisällön ja PR-jakelu. Vahvista jo tänään.
- PlatoData.Network Vertical Generatiivinen Ai. Vahvista itseäsi. Pääsy tästä.
- PlatoAiStream. Web3 Intelligence. Tietoa laajennettu. Pääsy tästä.
- PlatoESG. hiili, CleanTech, energia, ympäristö, Aurinko, Jätehuolto. Pääsy tästä.
- PlatonHealth. Biotekniikan ja kliinisten kokeiden älykkyys. Pääsy tästä.
- Lähde: https://stackabuse.com/guide-to-queues-in-python/
- :on
- :On
- :ei
- :missä
- $ YLÖS
- 1
- 11
- 13
- 17
- 20
- 7
- 8
- 9
- a
- Meistä
- siitä
- Toimia
- toimet
- todellinen
- todella
- lisä-
- lisää
- kehittynyt
- etuja
- eteenpäin
- Hälytys
- kohdista
- Kaikki
- mahdollistaa
- jo
- Myös
- aina
- keskuudessa
- an
- ja
- Kaikki
- Hakemus
- sovellukset
- lähestymistapa
- arkkitehtuuri
- OVAT
- perustelu
- Saapuu
- Arsenal
- AS
- näkökohdat
- osoitettu
- At
- välttää
- perustua
- perustiedot
- BE
- koska
- ennen
- Aloittelijan
- Alku
- käyttäytyminen
- suotuisa
- PARAS
- Blocks
- reunus
- sekä
- Tuo
- puskuri
- sisäänrakennettu
- mutta
- by
- CAN
- tapauksissa
- tyydyttää
- Catering
- Aiheuttaa
- tietty
- ominaisuudet
- tarkastaa
- valinta
- Valita
- selkeä
- kokoelmat
- Tulla
- pakottava
- monimutkainen
- monimutkaisuus
- laskennallinen
- tietokone
- Tietojenkäsittelyoppi
- käsite
- käsitteet
- johtopäätös
- samanaikainen
- kytketty
- Harkita
- vakio
- sisältää
- Kontit
- Ydin
- Laskuri
- Luominen
- kriteerit
- ratkaiseva
- asiakassuhde
- Asiakkaat
- tiedot
- tietojen syöttö
- Tietorakenne
- aineistot
- tekemisissä
- syvä
- syvempää
- kaivaa
- vaativa
- riippuvainen
- suunniteltu
- Määrittää
- kehittäjille
- Kehitys
- eri
- Häiritä
- selvä
- do
- alapuoli
- kukin
- innokas
- tehokkaasti
- tehokas
- elementti
- elementtejä
- syntyy
- loppu
- päättyy
- varmistaa
- varmistaa
- varmistamalla
- merkintä
- Vastaava
- virheet
- erityisesti
- ydin
- olennaisesti
- esimerkki
- poikkeus
- nimenomaisesti
- tutkitaan
- Tutkiminen
- ulkoinen
- perehdyttää
- kauaskantoinen
- FAST
- Löytää
- Etunimi
- virtaus
- Keskittää
- jälkeen
- varten
- muoto
- alkaen
- etuosa
- täysin
- perus-
- mennä
- Antaa
- Antaminen
- suuri
- perustus
- Kasvaa
- ohjaavat
- kahva
- Käsittely
- käytännön
- Olla
- ottaa
- auttaa
- Korkea
- erittäin
- rehellinen
- liihottaa
- Miten
- Miten
- Kuitenkin
- HTTPS
- ICON
- ihanteellinen
- if
- havainnollistaa
- toteuttaa
- täytäntöönpano
- täytäntöön
- täytäntöönpanosta
- vaikutukset
- tuoda
- merkittävästi
- tuovan
- in
- mukana
- ilmaisee
- tehottomuus
- esimerkki
- tulee
- kiehtova
- esittely
- intuitiivinen
- kysymykset
- IT
- SEN
- yhdistää
- vain
- Landschaft
- Kieli
- suuri
- Sukunimi
- asettaa
- johtaa
- oppiminen
- vähemmän
- antaa
- LG
- kirjastot
- Kirjasto
- pitää
- rajallinen
- linja
- Lista
- Listat
- elää
- ll
- Pitkät
- katso
- tehdä
- johto
- toimitusjohtaja
- monet
- välineet
- mekaniikka
- mekanismit
- Muisti
- menetelmä
- menetelmät
- ehkä
- Moduulit
- lisää
- eniten
- liikkua
- Tarve
- tarpeet
- Uusi
- Nro
- ei mitään
- vivahteet
- objekti
- tarkkailla
- of
- tarjoukset
- Tarjoukset
- usein
- on
- ONE
- toiminta
- käyttöjärjestelmät
- toiminta
- Operations
- Optimoida
- optimoitu
- or
- tilata
- Muut
- Muuta
- meidän
- ulos
- tuloksiin
- paletti
- kulkea
- suorituskyky
- esittävä
- henkilö
- Platon
- Platonin tietotieto
- PlatonData
- Pelaa
- yletön
- pop
- Pops
- mahdollinen
- mahdollisesti
- voimakas
- Käytännön
- estää
- aiemmin
- periaate
- Painaa
- prioriteetti
- ongelmia
- prosessi
- Käsitelty
- käsittely
- projekti
- omaisuus
- tarjoaa
- tarkoitus
- Python
- nopea
- nostaa
- alue
- RE
- todellinen maailma
- vähentämällä
- tarkentaa
- poistettu
- poistamalla
- edustaa
- pyynnöt
- edellyttää
- vaatimukset
- Vaatii
- resonaattori
- Rikas
- Rengas
- luja
- Rooli
- säännöt
- s
- tallentaa
- skenaario
- skenaariot
- aikataulutus
- tiede
- skriptejä
- saumattomasti
- Toinen
- palvella
- palveli
- palvelin
- setti
- useat
- varjo
- arkki
- shouldnt
- merkittävä
- merkitsee
- Yksinkertainen
- yksinkertaisuus
- tilanteita
- Koko
- So
- Tuotteemme
- ohjelmistokehitys
- Ratkaisumme
- jonkin verran
- hienostunut
- Tila
- erikoistunut
- spektri
- Stackabus
- standardi
- standardit
- seisoo
- Alkaa
- Aloita
- Tila
- Vaihe
- stop
- tallennettu
- tallentamiseksi
- suora
- puroihin
- rakenne
- rakenteet
- myöhempi
- Tukee
- SVG
- Vaihtaa
- syntaksi
- järjestelmä
- järjestelmät
- taulukko
- puuttua
- vie
- Tehtävä
- tehtävät
- tekniikat
- oppikirja
- kuin
- että
- -
- Maisema
- heidän
- Niitä
- teoreettinen
- teoria
- Siellä.
- Nämä
- ne
- ajatella
- tätä
- ne
- Kautta
- lippu
- aika
- että
- työkalut
- siirtyminen
- totta
- todella
- VUORO
- kaksi
- kaikkialla läsnä oleva
- paljastaa
- taustalla oleva
- ymmärtäminen
- ennalta arvaamaton
- us
- käyttää
- helppokäyttöinen
- käyttämällä
- arvo
- lajike
- eri
- Ve
- todentaa
- tilavuus
- vs
- odotus
- we
- verkko
- Web-palvelin
- Mitä
- Mikä on
- Pyörä
- kun
- joka
- vaikka
- KUKA
- leveä
- Laaja valikoima
- tulee
- with
- ilman
- Referenssit
- työnkulkuja
- työskentely
- kääri
- vielä
- Voit
- Sinun
- itse
- zephyrnet