Kokia eilė Golange?

Kokia Eile Golange



„Go“ yra populiari programavimo kalba, giriama už efektyvumą, lengvą naudojimą ir pritaikomumą. Turėdama gausų įrankių ir bibliotekų rinkinį, „Go“ kūrėjams suteikia reikiamų išteklių galingoms ir efektyvioms programinės įrangos programoms kurti. Nors Go neturi uodegos savo standartinėje bibliotekoje kaip duomenų struktūroje, juos galima įgyvendinti įvairiais metodais. Mes kalbėsime apie sąvoką uodegos ir kaip juos įgyvendinti šioje pamokoje.

Kas yra eilė?

Uodegos yra duomenų struktūros, kurios naudojamos elementams saugoti ir gauti iš anksto nustatyta tvarka. Tai linijinė duomenų struktūra, kuri primena krūvą ir laikosi FIFO (pirmas įėjimas, pirmas išėjimas) taisyklė. Tai gali būti palyginta su laukiančiųjų sąrašu arba eilute, kur pirmas aptarnaujamas pirmasis atvykęs asmuo. Esami komponentai nuleidžiami iš priekio eilė , o nugarėlėje pridedami nauji elementai.

Eilės įgyvendinimas Golange

Įgyvendinant a eilė in Go yra paprastas ir efektyvus ir gali būti įgyvendintas naudojant šiuos keturis metodus.







1: griežinėliai

Go, a gabalas yra dinaminis masyvas, kurio dydis gali keistis. Norėdami įgyvendinti a eilė naudojant a gabalas , galime pridėti elementų į galinę dalį gabalas naudodami įtaisytąją pridėjimo funkciją ir pašalinkite elementus iš priekio gabalas naudojant pjaustymą.



Šį metodą nesunku sukurti ir dėl „Go“ įtaisytųjų griežinėlių jis puikiai tinka pridėjimo ir pjaustymo operacijoms. Tačiau pjaustymo metodas, apimantis elementų kopijavimą į naują pagrindinį masyvą, gali tapti neveiksmingas, jei eilė plečiasi ir dėl to reikia kartoti eilės pašalinimo operacijas.



Šis kodas apibrėžia eilė įgyvendinimas naudojant „Go“ skiltį.





pagrindinis paketas

importuoti 'fmt'

pagrindinė funkcija ( ) {

eilė := padaryti ( [ ] sąsaja { } , 0 )

eilė = pridėti ( eilė , 'Anglų' )

eilė = pridėti ( eilė , 'urdu' )

eilė = pridėti ( eilė , 'Matematika' )

jeigu tik ( eilė ) > 0 {

daiktas := eilė [ 0 ]

eilė = eilė [ 1 : ]

fmt. Println ( daiktas )

}

jeigu tik ( eilė ) == 0 {

fmt. Println ( 'Eilė tuščia' )

} Kitas {

fmt. Println ( eilė )

}

}

Aukščiau pateiktame „Go“ kode naudojama dalis, kad būtų sukurta paprasta eilė duomenų struktūra. The pridėti () Funkcija naudojama elementams suvesti į eilę eilė slice, o pjaustymo operacija, kuri pašalina pradinį elementą, naudojama joms pašalinti. Su fmt.Println() , spausdinamas elementas, kurio eilė yra iškelta. Tada kodas naudoja tik() funkcija nustatyti, ar eilė tuščia, o jei taip, rašo „ Eilė yra tuščias“ naudojant fmt.Println() funkciją.

Išvestis



2: susieti sąrašai

Mazgai, turintys reikšmę ir žymeklį į kitą sąrašo mazgą, sudaro susietą sąrašą. Su dviem rodyklėmis, viena nukreipta į sąrašo priekį (galvą), o kita į galą (uodegą), galime įgyvendinti eilė naudojant susietą sąrašą. Elemento pašalinimas iš eilės (ištraukimas iš eilės) reiškia mazgo pašalinimą sąrašo priekyje, o elemento įtraukimas į eilę (įtraukimas į eilę) apima naujo mazgo įtraukimą sąrašo gale.

Šis metodas leidžia atlikti efektyvias eilės sudarymo ir pašalinimo iš eilių operacijas, nes reikia keisti tik pagrindines ir uodegos rodykles, o ne skiltelėmis pagrįstą sprendimą, kai reikia nukopijuoti elementus.

Naudokite susietą sąrašą, kad įgyvendintumėte a eilė naudojant žemiau pateiktą kodą:

pagrindinis paketas

importuoti 'fmt'

tipo Node struktūra {

vertės sąsaja { }

Kitas * Mazgas

}

įveskite eilė struktūra {

galva * Mazgas

uodega * Mazgas

}

pagrindinė funkcija ( ) {

eilė := & Eilė { galva : nulis , uodega : nulis }

naujas mazgas := & Mazgas { vertė : 'Anglų' , Kitas : nulis }

eilė. uodega = naujas mazgas

eilė. galva = naujas mazgas

naujas mazgas = & Mazgas { vertė : 'urdu' , Kitas : nulis }

eilė. uodega . Kitas = naujas mazgas

eilė. uodega = naujas mazgas

naujas mazgas = & Mazgas { vertė : 'Matematika' , Kitas : nulis }

eilė. uodega . Kitas = naujas mazgas

eilė. uodega = naujas mazgas

jeigu eilė. galva != nulis {

daiktas := eilė. galva . vertė

eilė. galva = eilė. galva . Kitas

fmt. Println ( daiktas )

}

jeigu eilė. galva == nulis {

fmt. Println ( 'Eilė tuščia' )

}

}

Mazgo struktūra nurodo kiekvieną eilės elementą ir turi du laukus: vertės laukas, skirtas elemento vertei saugoti, ir kitas laukas, skirtas nukreipti į kitą eilės elementą. Struktūra „Queue“ naudoja galvutės ir uodegos ypatybes, kad būtų galima sekti atitinkamai eilės priekį ir galą. The uodegos pirmasis elementas nurodomas galvos savybe, o paskutinis jo elementas nurodomas uodegos savybe.

Iš pradžių nustatomi galvos ir uodegos parametrai nulis kai naujas eilė yra nustatytas funkcijoje main(). Galvos ir uodegos rodyklės atnaujintos, kad būtų pridėti trys mazgai eilė su vertybėmis „anglų“, „urdu“, ir 'Matematika'. The 'Anglų' daiktas yra tada „nusitraukė į eilę“ (pašalintas) iš priekio eilė rodydami jo reikšmę ir nukreipdami galvos žymeklį į kitą mazgą eilė . Po ištraukimo iš eilės, jei antraštė tampa niekine, tai reiškia, kad eilė tuščia, o pranešimas „ Eilė yra tuščias“ išspausdinamas.

Išvestis

3: Struktūros

Programoje Go galite sukurti tinkintą duomenų struktūrą, vadinamą a struktūra atstovauti a eilė . Tai struktūra gali turėti laukus saugoti eilė elementus ir metodus, kaip pridėti ir pašalinti elementus, patikrinti, ar eilė tuščia, ir gauti dabartinį eilės dydį.

Šis būdas sukurti a eilė „In Go“ siūlo patogų ir integruotą diegimą su paprastais naudoti metodais, kuriuos galima išplėsti ir pritaikyti naudojant daugiau funkcijų. Tai lankstus požiūris, leidžiantis atlikti diegimo pakeitimus arba prireikus pridėti naujų galimybių.

Papročio kūrimas struktūra naudojant metodus, reikia rašyti papildomą kodą, palyginti su kitais dviem būdais, o tai gali padidinti sudėtingumą. Tačiau tai taip pat suteikia daugiau lankstumo ir daugiau kontrolės įgyvendinant eilė .

Šiame pavyzdyje parodytas duomenų struktūros kūrimas, vaizduojantis a eilė eiti.

pagrindinis paketas

importuoti 'fmt'

įveskite eilė struktūra {
daiktų [ ] sąsaja { }
}

func ( q * Eilė ) Eilė ( elemento sąsaja { } ) {
q. daiktų = pridėti ( q. daiktų , daiktas )
}

func ( q * Eilė ) Nutraukti eilę ( ) sąsaja { } {
jeigu tik ( q. daiktų ) == 0 {
grąžinti nulis
}
daiktas := q. daiktų [ 0 ]
q. daiktų = q. daiktų [ 1 : ]
grąžinti daiktas
}

func ( q * Eilė ) Yra tuščias ( ) bool {
grąžinti tik ( q. daiktų ) == 0
}

func ( q * Eilė ) Dydis ( ) tarpt {
grąžinti tik ( q. daiktų )
}


pagrindinė funkcija ( ) {

eilė := & Eilė { daiktų : padaryti ( [ ] sąsaja { } , 0 ) }

eilė. Eilė ( 'Anglų' )
eilė. Eilė ( 'urdu' )
eilė. Eilė ( 'Matematika' )

daiktas := eilė. Nutraukti eilę ( )
fmt. Println ( daiktas )
jeigu eilė. Yra tuščias ( ) {
fmt. Println ( 'Eilė tuščia' )
}

dydis := eilė. Dydis ( )
fmt. Println ( 'Eilės dydis:' , dydis )
}

Aukščiau pateiktame kode elementas pridedamas prie elemento skilties per Eilė () metodas, kuris perkelia jį į pabaigą eilė . Sekant Pirmas įėjimas, pirmas išėjęs (FIFO) principas, Nutraukti () metodas paima elementą iš priekio eilė ir grąžina. Elemento gabalo ilgis tikrinamas kaip dalis Yra tuščias() metodu patikrinkite, ar eilė Yra tuščias. Grąžinus prekių gabalo ilgį, Dydis () metodas grąžina srovę uodegos dydis.

Funkcija main() naudoja Eilės struktūra sukurti naują eilė , pridėti prie jo elementų, pašalinti elementus iš jo, nustatyti, ar eilė yra tuščias, ir apskaičiuokite jo dydį.

Išvestis

4: kanalai

„Go“ įtaisytąjį kanalo tipą galima naudoti įgyvendinant a eilė duomenų struktūra. Kanalas gali būti sukurtas su buferio dydžiu, kad būtų apribotas elementų, kuriuos galima įrašyti į eilę bet kuriuo metu, skaičius. Norėdami pridėti elementą prie eilė , jį galima išsiųsti į kanalą naudojant <- operatorius, o norint pašalinti elementą iš eilės, jį galima gauti iš kanalo naudojant tą patį operatorių.

Šis metodas gali būti labai naudingas situacijose, kai tuo pačiu metu pasiekiama prieiga prie eilė reikalingas, nes kanalai yra saugūs naudoti vienu metu.

Labai svarbu atsiminti, kad „Go“ kanalai yra įvesti. Tai reiškia, kad kanalu galite siųsti tik tam tikro tipo reikšmes, o iš kanalo galite gauti tik to paties tipo vertes.

Tai iliustracija, kaip naudoti kanalą kuriant a eilė duomenų struktūra Go.

pagrindinis paketas

importuoti (
'fmt'
'laikas'
)

įveskite eilė struktūra {
elementų kanalo sąsaja { }
}

funcNewQueue ( ) * Eilė {


q := & Eilė {

daiktų : padaryti ( chan sąsaja { } ) ,
}
eik q. apdoroti daiktai ( )
grąžinti q
}

func ( q * Eilė ) apdoroti daiktai ( ) {
dėl daiktas := diapazonas q. daiktų {
jeigu daiktas == 'Anglų' {
fmt. Println ( 'Nutraukta į eilę:' , daiktas )
}
}
}


func ( q * Eilė ) Eilė ( elemento sąsaja { } ) {

q. daiktų <- daiktas

}

funcmain ( ) {
eilė := Naujoji eilė ( )

eilė. Eilė ( 'Anglų' )
eilė. Eilė ( 'urdu' )
eilė. Eilė ( 'Matematika' )

laikas . Miegoti ( 2 * laikas . Antra )
}

Aukščiau pateiktas kodas sukuria a Eilės struktūra su vienu lauku daiktų kuris yra kanalas sąsaja{} tipo. The Nauja eilė () funkcija sukuria naują egzempliorių Eilė ir inicijuoja jo 'daiktai' lauką su nauju nebuferiniu kanalu. Taip pat pradedama nauja gorutina, skirta apdoroti elementus, įtrauktus į eilę naudojant apdoroti elementai () funkcija. The apdoroti elementai () funkcija patikrina, ar gauta prekė yra lygi 'Anglų' ir išspausdina pranešimą į konsolę tik apie tą elementą. The Eilė () Funkcija naudojama naujiems elementams įtraukti į eilę.

Išvestis

Išvada

Eilė yra pagrindinė Go duomenų struktūra, naudojama elementams saugoti ir gauti tam tikra tvarka. Įgyvendinant a eilė „In Go“ yra saugus siūlams, todėl jie yra idealus pasirinkimas įgyvendinant programų lygiagretumą. Jis gali būti įgyvendintas naudojant skilteles, susietus sąrašus, struktūras ir kanalus. Išsami informacija jau pateikta pirmiau pateiktose gairėse.