C# virn Push & Pop näidetega
⚡ Nutikas kokkuvõte
C# keeles on Stack System.Collections nimeruumi kogum, mis järgib LIFO (last in, first out) põhimõtet, kus Push meetod lisab elemendi algusse ja Pop meetod eemaldab selle.
Mis on Stack C#-s?
Virn on erijuhtude kollektsioon, mis esindab LIFO-kontseptsiooni. Et esmalt mõista LIFO-d, võtame näite. Kujutage ette virna raamatuid, kus iga raamat on üksteise peal.
Raamatute puhul tähendab "viimase esimesena väljas" kontseptsioon seda, et raamatuvirnast saab eemaldada ainult kõige kõrgema raamatu. Raamatut pole võimalik eemaldada, sest siis segaks see virna sättimist.
Seega C#, töötab ka virn samamoodi. Elemendid lisatakse virna, üks teineteise peale. Elemendi virnasse lisamise protsessi nimetatakse tõukeoperatsiooniks. Elemendi virnast eemaldamiseks saate eemaldada ka virna kõige ülemise elemendi. Seda toimingut nimetatakse popiks.
Vaatame Stacki kollektsiooni jaoks saadaolevaid toiminguid üksikasjalikumalt.
Virna deklaratsioon
Pinu luuakse tüübi Stack Data abil. Märksõna "uus" kasutatakse virna objekti loomiseks. Seejärel määratakse objekt muutujale st.
Stack st = new Stack()
Elementide lisamine virnasse
Tõukemeetodit kasutatakse elemendi lisamiseks virnale. Avalduse üldine süntaks on toodud allpool.
Stack.push(element)
Elementide eemaldamine virnast
Elemendi eemaldamiseks virnast kasutatakse pop-meetodit. Pop-operatsioon tagastab virna kõige ülemise elemendi. Avalduse üldine süntaks on toodud allpool
Stack.pop()
Loendama
Seda atribuuti kasutatakse virnas olevate üksuste arvu hankimiseks. Allpool on selle avalduse üldine süntaks.
Stack.Count
Sisaldab
Seda meetodit kasutatakse selleks, et näha, kas virnas on elementi. Allpool on selle avalduse üldine süntaks. Avaldus tagastab tõene, kui element on olemas, vastasel juhul tagastab see väärtuse false.
Stack.Contains(element)
Nüüd vaatame, kuidas see töötab koodi tasemel. Kogu alltoodud kood kirjutatakse meile Konsooli rakendus. Kood kirjutatakse meie faili Program.cs.
Allolevas programmis kirjutame koodi, et näha, kuidas saame ülalnimetatud meetodeid kasutada.
Näide 1: Stack.Push() meetod
Selles näites näeme
- Kuidas virn luuakse.
- Kuidas kuvada virna elemente ning kasutada loendamis- ja sisaldamismeetodeid.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Stack st = new Stack(); st.Push(1); st.Push(2); st.Push(3); foreach (Object obj in st) { Console.WriteLine(obj); } Console.WriteLine(); Console.WriteLine(); Console.WriteLine("The number of elements in the stack " +st.Count); Console.WriteLine("Does the stack contain the elements 3 "+st.Contains(3)); Console.ReadKey(); } } }
Code Selgitus:-
- Esimest sammu kasutatakse virna deklareerimiseks. Siin deklareerime "st" muutujana, mis hoiab meie virna elemente.
- Järgmisena lisame oma virnale 3 elementi. Iga element lisatakse Push-meetodi abil.
- Kuna virna elementidele ei pääse juurde indeksi positsiooni kaudu nagu massiivi loend, peame virna elementide kuvamiseks kasutama teistsugust lähenemist. Objekt (obj) on ajutine muutuja, mis on deklareeritud virna iga elemendi hoidmiseks. Seejärel kasutame virna iga elemendi läbimiseks foreach-lauset. Iga virnaelemendi jaoks määratakse väärtus obj muutujale. Seejärel kasutame konsooli väärtuse kuvamiseks käsku Console.Writeline.
- Me kasutame atribuuti Count (st.count), et saada virnas olevate üksuste arv. See vara tagastab numbri. Seejärel kuvame selle väärtuse konsoolile.
- Seejärel kasutame meetodit Sisaldab, et näha, kas väärtus 3 on meie virnas. See tagastab kas tõese või vale väärtuse. Seejärel kuvame selle tagastamisväärtuse konsoolile.
Kui ülaltoodud kood on õigesti sisestatud ja programm käivitatakse, kuvatakse järgmine väljund.
Väljund:
Väljundist näeme, et kuvatakse virna elemendid. Samuti kuvatakse True väärtus, mis ütleb, et väärtus 3 on virnas määratletud.
märkused: olete märganud, et esimesena kuvatakse viimati virna lükatud element. See on virna kõige ülemine element. Samuti kuvatakse väljundis virna elementide arv.
Näide 2: Stack.Pop() meetod
Nüüd vaatame "eemaldamise" funktsiooni. Näeme koodi, mis on vajalik virnast ülemise elemendi eemaldamiseks.
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Stack st = new Stack(); st.Push(1); st.Push(2); st.Push(3); st.Pop(); foreach (Object obj in st) { Console.WriteLine(obj); } Console.ReadKey(); } } }
Code Selgitus:-
- Siin anname lihtsalt välja pop-meetodi, mida kasutatakse elemendi virnast eemaldamiseks.
Kui ülaltoodud kood on õigesti sisestatud ja programm käivitatakse, kuvatakse järgmine väljund.
Väljund:
Näeme, et element 3 eemaldati virnast.
C# Stack Peek() meetod
Push ja Pop meetodid töötavad pinu ülemise osaga, aga mõnikord on vaja vaadata ainult ülemist elementi ilma seda eemaldamata. Peek meetod teeb just seda. See tagastab pinu ülemise osa väärtuse, jättes kogumi muutmata, mis on kasulik, kui soovite järgmist elementi enne selle väljapanekut testida.
Step 1) Loo virn ja aseta sellele kolm elementi nii, et väärtus 3 oleks peal.
Step 2) Ülemise elemendi lugemiseks kutsuge Peek meetod ja seejärel kontrollige Count omadust, et midagi ei eemaldatud.
using System; using System.Collections; namespace DemoApplication { class Program { static void Main(string[] args) { Stack st = new Stack(); st.Push(1); st.Push(2); st.Push(3); Console.WriteLine(st.Peek()); Console.WriteLine(st.Count); Console.ReadKey(); } } }
Code Selgitus:-
- Deklareeritakse pinu nimega st ning väärtused 1, 2 ja 3 liidetakse meetodi Push abil, seega saab 3-st kõige ülemine element.
- Peek meetod tagastab ülemise elemendi seda eemaldamata ja Count omadus kuvab endiselt pinus olevate elementide koguarvu.
Programmi käivitamisel prindib see väärtuse 3 Peekist ja seejärel krahvist 3, mis tõestab, et element jääb pinusse. Kui pinu on tühi, viskab Peek vea „Vigane“OperationException, seega on enne selle kutsumist ohutu kontrollida Count'i.
Üldine virn C#-s
Ülaltoodud näited kasutavad System.Collectionsi mitte-üldiseid Stack-klasse, mis salvestab iga elemendi objektina. Tänapäeva C# kood eelistab tavaliselt üldist Stack-klassi. Klass nimeruumist System.Collections.Generic. See seob pinu ühe deklareeritud tüübiga, seega kompilaator kontrollib iga Push'i ja Pop'i ning tüübivahetust ega poksimist pole vaja.
Üldise Stacki peamised eelised on loetletud allpool.
- Tüübi ohutus: Tüüp fikseeritakse deklareerimisel, seega saab edastada ainult seda tüüpi väärtusi ja vead püütakse kinni kompileerimise ajal.
- Ei mingit poksimist: Väärtusetüübid, näiteks int, salvestatakse otse, mis väldib mitte-üldkasutatava Stacki poolt makstavat poksikulu.
- Koristaja loeb: Pop ja Peek tagastavad deklareeritud tüübi otse, seega te ei teisenda tulemust objektist tagasi.
using System; using System.Collections.Generic; namespace DemoApplication { class Program { static void Main(string[] args) { Stack<string> st = new Stack<string>(); st.Push("Java"); st.Push("Python"); Console.WriteLine(st.Pop()); Console.ReadKey(); } } }
Selles näites deklareeritakse pinu kui Stack , seega aktsepteerib see ainult stringväärtusi. Pop-meetod tagastab stringi otse ja prindib Python, viimane väärtus lükati. Iga uue projekti puhul on üldine Stack on soovitatav valik.
Erinevus pinu ja järjekorra vahel C#-s
Virn ja järjekorda on mõlemad kogumid, mis kontrollivad elementide eemaldamise järjekorda, kuid kasutavad vastupidiseid reegleid. Pinu puhul on tegemist viimasena sissetuleva, esimesena väljamineva elemendiga, samas kui järjekorra puhul on esimesena sissetuleva, esimesena väljamineva elemendi valimine. Õige elemendi valimine teeb teie koodi eesmärgi teistele arendajatele selgeks.
Peamised erinevused on loetletud allpool:
- Järjekord: Pinu puhul eemaldatakse kõigepealt viimati lisatud element (LIFO), järjekorra puhul aga kõigepealt vanim element (FIFO).
- Meetodid: Stack kasutab Push'i ja Pop'i, samas kui järjekord kasutab lisamiseks Enqueue'i ja eemaldamiseks Dequeue'i.
- Juurdepääs tipptasemel elementidele: Pinu loeb oma järgmist elementi Peeki abil ja järjekord loeb oma järgmist elementi Peeki abil eestpoolt.
- Tüüpilised kasutusalad: Stacks sobivad tagasivõtmise funktsioonide, avaldiste hindamise ja rekursiooniga trackuningas, samas kui järjekorrad sobivad ajastamiseks, puhverdamiseks ja laiuspõhiseks läbimiseks.
Mõlemad tüübid on saadaval üldises vormis Stackina ja järjekord System.Collections.Generic failis, nii et tüübikindlus on tagatud mõlema valikuga.





