Kaj je čakalna vrsta v Golangu?

Kaj Je Cakalna Vrsta V Golangu



Go je priljubljen programski jezik, ki ga hvalijo zaradi učinkovitosti, enostavnosti uporabe in prilagodljivosti. Z bogatim naborom orodij in knjižnic Go razvijalcem zagotavlja potrebna sredstva za gradnjo zmogljivih in učinkovitih programskih aplikacij. Čeprav Go nima repi v svoji standardni knjižnici kot podatkovni strukturi jih je mogoče implementirati z različnimi metodami. Govorili bomo o konceptu repi in kako jih implementirati v tej vadnici.

Kaj je čakalna vrsta?

repi so podatkovne strukture, ki se uporabljajo za shranjevanje in pridobivanje elementov v vnaprej določenem vrstnem redu. Je linearna podatkovna struktura, ki spominja na sklad in se drži FIFO (First-In, First-Out) pravilo. Lahko ga primerjamo s čakalnim seznamom ali vrsto, kjer prva oseba, ki pride, prejme storitev. Obstoječe komponente se spustijo s sprednje strani čakalna vrsta , na zadnji strani pa so dodani novi elementi.

Implementacija čakalne vrste v Golangu

Izvedba a čakalna vrsta in Go je preprost in učinkovit in ga je mogoče implementirati z naslednjimi štirimi metodami.







1: Rezine

V Go, a rezina je dinamično polje, ki lahko spreminja velikost. Za izvajanje a čakalna vrsta z uporabo a rezina , lahko dodamo elemente na zadnjo stran rezina z vgrajeno funkcijo dodajanja in odstranjevanje elementov s sprednje strani rezina z uporabo rezanja.



Ta pristop je enostaven za izdelavo in ponuja dobro zmogljivost za operacije dodajanja in rezanja zahvaljujoč vgrajenim rezinam Go. Vendar lahko metoda rezanja, ki vključuje kopiranje elementov v novo osnovno matriko, postane neučinkovita, če čakalna vrsta razširi in zahteva ponavljajoče se operacije odstranjevanja iz vrste.



Naslednja koda definira čakalna vrsta implementacija z uporabo rezine v Go.





glavni paket

uvoz 'fmt'

glavna funkcija ( ) {

čakalna vrsta := narediti ( [ ] vmesnik { } , 0 )

čakalna vrsta = priložiti ( čakalna vrsta , 'angleščina' )

čakalna vrsta = priložiti ( čakalna vrsta , 'urdu' )

čakalna vrsta = priložiti ( čakalna vrsta , 'matematika' )

če samo ( čakalna vrsta ) > 0 {

postavka := čakalna vrsta [ 0 ]

čakalna vrsta = čakalna vrsta [ 1 : ]

fmt. Println ( postavka )

}

če samo ( čakalna vrsta ) == 0 {

fmt. Println ( 'Čakalna vrsta je prazna' )

} drugače {

fmt. Println ( čakalna vrsta )

}

}

Zgornja koda Go uporablja rezino za izdelavo enostavnega čakalna vrsta struktura podatkov. The pripni() funkcija se uporablja za postavljanje elementov v čakalno vrsto čakalna vrsta slice in operacija rezine, ki odstrani začetni element, se uporabi za njihovo odstranitev iz čakalne vrste. z fmt.Println() , se natisne element iz vrste. Koda nato uporabi samo() funkcija za ugotavljanje, ali je čakalna vrsta prazna, in če je, zapiše ' Čakalna vrsta je prazen« z uporabo funkcije fmt.Println().

Izhod



2: Povezani seznami

Vozlišča, ki nosijo vrednost in kazalec na naslednje vozlišče na seznamu, sestavljajo povezan seznam. Z dvema kazalcema, od katerih eden kaže na sprednji del (glava) seznama, drugi pa na zadnji del (rep), lahko izvedemo čakalna vrsta z uporabo povezanega seznama. Odstranjevanje elementa iz čakalne vrste (odstranjevanje iz čakalne vrste) vključuje odstranitev vozlišča na začetku seznama, medtem ko dodajanje elementa v čakalno vrsto (postavljanje v čakalno vrsto) vključuje dodajanje novega vozlišča na zadnji del seznama.

Ta metoda omogoča učinkovite operacije postavljanja v čakalno vrsto in odstranjevanja iz čakalne vrste, ker je treba spremeniti le kazalca glave in repa, v nasprotju z rešitvijo, ki temelji na rezini, kjer bi bilo treba elemente kopirati.

Uporabite povezani seznam za izvedbo a čakalna vrsta z uporabo spodnje kode:

glavni paket

uvoz 'fmt'

tip Node struct {

vrednostni vmesnik { }

Naslednji * Vozlišče

}

vrsta Čakalna vrsta struct {

glavo * Vozlišče

rep * Vozlišče

}

glavna funkcija ( ) {

čakalna vrsta := & Čakalna vrsta { glavo : nič , rep : nič }

novovozlišče := & Vozlišče { vrednost : 'angleščina' , Naslednji : nič }

čakalna vrsta. rep = novovozlišče

čakalna vrsta. glavo = novovozlišče

novovozlišče = & Vozlišče { vrednost : 'urdu' , Naslednji : nič }

čakalna vrsta. rep . Naslednji = novovozlišče

čakalna vrsta. rep = novovozlišče

novovozlišče = & Vozlišče { vrednost : 'matematika' , Naslednji : nič }

čakalna vrsta. rep . Naslednji = novovozlišče

čakalna vrsta. rep = novovozlišče

če čakalna vrsta. glavo != nič {

postavka := čakalna vrsta. glavo . vrednost

čakalna vrsta. glavo = čakalna vrsta. glavo . Naslednji

fmt. Println ( postavka )

}

če čakalna vrsta. glavo == nič {

fmt. Println ( 'Čakalna vrsta je prazna' )

}

}

Struktura vozlišča predstavlja vsako postavko v čakalni vrsti in vsebuje dve polji: polje vrednosti za shranjevanje vrednosti postavke in naslednje polje za kazanje na naslednjo postavko v čakalni vrsti. Struktura Queue uporablja lastnosti glave in repa za spremljanje sprednjega in zadnjega dela čakalne vrste. The rep prva postavka je označena z lastnostjo glave, zadnja postavka pa z lastnostjo repa.

Parametra glave in repa sta prvotno nastavljena na nič ko nov čakalna vrsta se vzpostavi v funkciji main(). Kazalca glave in repa sta posodobljena, da dodamo tri vozlišča v čakalna vrsta z vrednotami 'angleščina', 'urdu', in 'matematika'. The 'angleščina' postavka je potem 'izključeno iz vrste' (odstranjeno) s sprednje strani čakalna vrsta s prikazom njegove vrednosti in premikanjem kazalca glave na naslednje vozlišče v čakalna vrsta . Če glava po odstranitvi iz vrste postane ničelna, to pomeni, da je čakalna vrsta prazna in sporočilo ' Čakalna vrsta je prazno« je natisnjeno.

Izhod

3: Strukture

V Go lahko ustvarite podatkovno strukturo po meri, imenovano a struct predstavljati a čakalna vrsta . to struct ima lahko polja za shranjevanje čakalna vrsta elemente in metode za dodajanje in odstranjevanje elementov, preverjanje, ali je čakalna vrsta prazna, in pridobitev trenutne velikosti čakalne vrste.

Ta način ustvarjanja a čakalna vrsta in Go ponuja priročno in enkapsulirano izvedbo z metodami, enostavnimi za uporabo, ki jih je mogoče razširiti in prilagoditi z več funkcijami. To je prilagodljiv pristop, ki omogoča spremembe izvedbe ali dodajanje novih zmogljivosti, kadar koli je to potrebno.

Ustvarjanje po meri struct z metodami vključuje pisanje dodatne kode v primerjavi z drugima dvema načinoma, kar lahko poveča kompleksnost. Vendar pa zagotavlja tudi večjo prilagodljivost in nadzor nad izvajanjem čakalna vrsta .

Naslednji primer prikazuje ustvarjanje podatkovne strukture za predstavitev a čakalna vrsta v Go.

glavni paket

uvoz 'fmt'

vrsta Čakalna vrsta struct {
predmete [ ] vmesnik { }
}

funk ( q * Čakalna vrsta ) V čakalno vrsto ( vmesnik predmeta { } ) {
q. predmete = priložiti ( q. predmete , postavka )
}

funk ( q * Čakalna vrsta ) Odstrani iz vrste ( ) vmesnik { } {
če samo ( q. predmete ) == 0 {
vrnitev nič
}
postavka := q. predmete [ 0 ]
q. predmete = q. predmete [ 1 : ]
vrnitev postavka
}

funk ( q * Čakalna vrsta ) Je prazno ( ) bool {
vrnitev samo ( q. predmete ) == 0
}

funk ( q * Čakalna vrsta ) Velikost ( ) int {
vrnitev samo ( q. predmete )
}


glavna funkcija ( ) {

čakalna vrsta := & Čakalna vrsta { predmete : narediti ( [ ] vmesnik { } , 0 ) }

čakalna vrsta. V čakalno vrsto ( 'angleščina' )
čakalna vrsta. V čakalno vrsto ( 'urdu' )
čakalna vrsta. V čakalno vrsto ( 'matematika' )

postavka := čakalna vrsta. Odstrani iz vrste ( )
fmt. Println ( postavka )
če čakalna vrsta. Je prazno ( ) {
fmt. Println ( 'Čakalna vrsta je prazna' )
}

velikost := čakalna vrsta. Velikost ( )
fmt. Println ( 'Velikost čakalne vrste:' , velikost )
}

V zgornji kodi je element pripet rezini predmeta prek V čakalno vrsto() metodo, ki jo premakne na konec čakalna vrsta . Po Prvi vstopi, prvi ven (FIFO) načelo, Odstrani iz vrste() metoda vzame predmet iz sprednje strani čakalna vrsta in ga vrne. Dolžina rezine predmeta se preveri kot del Je prazno() preverjanje metode, da ugotovite, ali čakalna vrsta je prazno. Z vrnitvijo dolžine rezine elementov je Velikost () metoda vrne trenutni rep velikost.

Funkcija main() uporablja Struktura čakalne vrste ustvariti novo čakalna vrsta , mu dodajte elemente, iz njega odstranite elemente, ugotovite, ali je čakalna vrsta je prazen in izračunajte njegovo velikost.

Izhod

4: Kanali

V Go lahko vgrajeno vrsto kanala uporabite za implementacijo a čakalna vrsta struktura podatkov. Kanal je mogoče ustvariti z velikostjo vmesnega pomnilnika, da se omeji število elementov, ki jih je mogoče v danem trenutku postaviti v čakalno vrsto. Če želite dodati element v čakalna vrsta , ga lahko pošljete na kanal z uporabo <- medtem ko je za odstranitev elementa iz čakalne vrste ta lahko prejet iz kanala z istim operatorjem.

Ta pristop je lahko zelo uporaben v situacijah, kjer je hkratni dostop do čakalna vrsta zahteva, saj so kanali sami po sebi varni za sočasno uporabo.

Ključnega pomena je, da se spomnite, da so kanali Go tipkani. To pomeni, da lahko prek kanala pošiljate samo vrednosti določene vrste in iz kanala prejemate samo vrednosti iste vrste.

To je ilustracija, kako uporabiti kanal za izdelavo a čakalna vrsta strukturo podatkov v Go.

glavni paket

uvoz (
'fmt'
'čas'
)

vrsta Čakalna vrsta struct {
predmeti chaninterface { }
}

funcNewQueue ( ) * Čakalna vrsta {


q := & Čakalna vrsta {

predmete : narediti ( vmesnik chan { } ) ,
}
pojdi q. processItems ( )
vrnitev q
}

funk ( q * Čakalna vrsta ) processItems ( ) {
za postavka := obseg q. predmete {
če postavka == 'angleščina' {
fmt. Println ( 'Odstranjeno iz vrste:' , postavka )
}
}
}


funk ( q * Čakalna vrsta ) V čakalno vrsto ( vmesnik predmeta { } ) {

q. predmete <- postavka

}

funcmain ( ) {
čakalna vrsta := Nova čakalna vrsta ( )

čakalna vrsta. V čakalno vrsto ( 'angleščina' )
čakalna vrsta. V čakalno vrsto ( 'urdu' )
čakalna vrsta. V čakalno vrsto ( 'matematika' )

čas . spi ( 2 * čas . drugič )
}

Zgornja koda ustvari a Struktura čakalne vrste z enim samim poljem predmete ki je kanal vmesnik{} vrsta. The NewQueue() funkcija ustvari nov primerek Čakalna vrsta in ga inicializira 'predmeti' polje z novim kanalom brez medpomnjenja. Prav tako zažene novo rutino za obdelavo elementov, dodanih v čakalno vrsto, z uporabo processItems() funkcijo. The processItems() funkcija preveri, ali je prejeti element enak 'angleščina' in natisne sporočilo na konzolo samo za ta element. The V čakalno vrsto() funkcija se uporablja za dodajanje novih elementov v čakalno vrsto.

Izhod

Zaključek

Čakalna vrsta je bistvena podatkovna struktura v Go, ki se uporablja za shranjevanje in pridobivanje elementov v določenem vrstnem redu. Izvedba a čakalna vrsta v Go je varen za niti, zaradi česar so idealna izbira za implementacijo sočasnosti v programih. Izvaja se lahko z uporabo rezin, povezanih seznamov, struktur in kanalov. Vse podrobnosti so že navedene v zgoraj navedenih smernicah.