C# Stack Push & Pop példákkal
⚡ Okos összefoglaló
A C#-ban a Stack metódus a System.Collections névtér egy gyűjteménye, amely a LIFO (utoljára be, először ki) elvet követi, ahol a Push metódus hozzáad egy elemet a tetejéhez, a Pop metódus pedig eltávolítja azt.
Mi a Stack a C#-ban?
A verem egy speciális esetgyűjtemény, amely a „last in first out” (LIFO) koncepciót képviseli. A LIFO megértéséhez vegyünk egy példát. Képzeljen el egy halom könyvet, amelyekben minden könyv egymás tetején van.
A könyvek esetében az „utolsó az első” koncepció azt jelenti, hogy csak a legfelső könyvet lehet eltávolítani a könyvkötegből. Nem lehet könyvet kivenni a kettő közül, mert akkor az megzavarná a köteg beállítását.
Ezért C#, a verem is ugyanúgy működik. Az elemek egymás tetejére kerülnek a verembe. Azt a folyamatot, amikor egy elemet hozzáadunk a veremhez, push műveletnek nevezzük. Elemnek a veremből való eltávolításához eltávolíthatja a verem legfelső elemét is. Ezt a műveletet popnak nevezik.
Nézzük meg részletesebben a Stack gyűjteményhez elérhető műveleteket.
Nyilatkozat a veremről
A verem a Stack Data típus segítségével jön létre. Az „új” kulcsszó egy verem objektumának létrehozására szolgál. Az objektumot ezután az st változóhoz rendeljük.
Stack st = new Stack()
Elemek hozzáadása a veremhez
A push módszerrel elemet adunk a veremhez. Az utasítás általános szintaxisa alább látható.
Stack.push(element)
Elemek eltávolítása a veremből
A pop módszerrel egy elemet távolítanak el a veremből. A pop művelet a verem legfelső elemét adja vissza. Az utasítás általános szintaxisa alább látható
Stack.pop()
Gróf
Ez a tulajdonság a veremben lévő elemek számának lekérésére szolgál. Az alábbiakban ennek az állításnak az általános szintaxisa látható.
Stack.Count
tartalmaz
Ezzel a módszerrel ellenőrizhető, hogy van-e elem a veremben. Az alábbiakban ennek az állításnak az általános szintaxisa látható. Az utasítás igazat ad vissza, ha az elem létezik, ellenkező esetben false értéket ad vissza.
Stack.Contains(element)
Lássuk, hogyan működik ez kódszinten. Az alább említett kódok mindegyike meg lesz írva nekünk Konzol alkalmazás. A kód a Program.cs fájlunkba kerül.
Az alábbi programban megírjuk a kódot, hogy megnézzük, hogyan tudjuk használni a fent említett módszereket.
1. példa: Stack.Push() metódus
Ebben a példában látni fogjuk
- Hogyan jön létre a verem.
- A verem elemeinek megjelenítése, valamint a Count és Contain metódusok használata.
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 Magyarázat:-
- Az első lépés a verem deklarálására szolgál. Itt deklaráljuk az „st”-t változóként, amely a veremünk elemeit tárolja.
- Ezután hozzáadunk 3 elemet a veremünkhöz. Minden elem a Push módszerrel kerül hozzáadásra.
- Most mivel a veremelemek nem érhetők el az indexpozíción keresztül, mint a tömb lista, más megközelítést kell alkalmaznunk a verem elemeinek megjelenítéséhez. Az objektum (obj) egy ideiglenes változó, amely a verem minden elemének tárolására van deklarálva. Ezután a foreach utasítással végigmegyünk a verem egyes elemei között. Minden egyes veremelemnél az érték az obj változóhoz van rendelve. Ezután a Console.Writeline paranccsal jelenítjük meg az értéket a konzolon.
- A Count tulajdonságot használjuk (st.count), hogy megkapja a halomban lévő elemek számát. Ez a tulajdonság egy számot ad vissza. Ezután ezt az értéket megjelenítjük a konzolon.
- Ezután a Contains metódussal ellenőrizzük, hogy a 3-as érték jelen van-e a veremünkben. Ez igaz vagy hamis értéket ad vissza. Ezután ezt a visszatérési értéket megjelenítjük a konzolon.
Ha a fenti kódot megfelelően adta meg és a program lefut, a következő kimenet jelenik meg.
output:
A kimenetből láthatjuk, hogy a verem elemei megjelennek. A True értéke is megjelenik, jelezve, hogy a 3 érték a veremben van meghatározva.
Megjegyzések: Észrevette, hogy a verembe utoljára betolt elem jelenik meg először. Ez a verem legfelső eleme. A veremelemek száma is megjelenik a kimenetben.
2. példa: Stack.Pop() metódus
Most nézzük az „eltávolítás” funkciót. Látni fogjuk a legfelső elem veremből való eltávolításához szükséges kódot.
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 Magyarázat:-
- Itt csak a pop módszert adjuk ki, amely egy elem eltávolítására szolgál a veremből.
Ha a fenti kódot megfelelően beírta és a program lefut, a következő kimenet jelenik meg.
output:
Láthatjuk, hogy a 3. elemet eltávolították a veremből.
C# Stack Peek() metódus
A Push és Pop metódusok a verem tetejével dolgoznak, de néha csak a legfelső elemet kell megvizsgálni anélkül, hogy eltávolítanánk azt. A Peek metódus pontosan ezt teszi. Visszaadja a verem legfelső értékét, miközben a gyűjteményt változatlanul hagyja, ami akkor hasznos, ha a következő elemet tesztelni szeretnéd, mielőtt eldöntenéd, hogy ki szeretnéd-e venni.
Step 1) Hozz létre egy halmot, és helyezz rá három elemet úgy, hogy a 3-as érték kerüljön felülre.
Step 2) Hívd meg a Peek metódust a legfelső elem beolvasásához, majd ellenőrizd a Count tulajdonságot, hogy semmi sem lett-e eltávolítva.
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 Magyarázat:-
- Egy st nevű verem deklarálásra kerül, és az 1, 2 és 3 értékeket a Push metódussal összeadjuk, így a 3 lesz a legfelső elem.
- A Peek metódus a legfelső elemet adja vissza eltávolítás nélkül, a Count tulajdonság pedig továbbra is a veremben lévő elemek teljes számát jelenti.
Amikor a program fut, kiírja az értéket 3 Peek-től, majd a gróftól 3, ami bizonyítja, hogy az elem a veremben marad. Ha a verem üres, a Peek érvénytelen értéket dob.OperationException, így biztonságosan ellenőrizhetjük a Count értékét a hívás előtt.
Általános verem C#-ban
A fenti példák a System.Collections nem generikus Stack osztályát használják, amely minden elemet objektumként tárol. A modern C# kód általában az generikus Stack osztályt részesíti előnyben. osztály a System.Collections.Generic névtérből. Ez a verem egyetlen deklarált típushoz köti, így a fordító minden Push és Pop utasítást ellenőriz, és nincs szükség típusátalakításra vagy dobozolásra.
A generikus Stack legfontosabb előnyei alább felsorolva.
- Típusbiztonság: A típus a deklarációnál rögzített, így csak az adott típusú értékek küldhetők be, és a hibákat fordítási időben észleli a rendszer.
- Nincs boksz: Az olyan értéktípusok, mint az int, közvetlenül tárolódnak, így elkerülhető a nem generikus Stack által fizetendő dobozolási költség.
- A tisztító ezt olvassa: A Pop és a Peek közvetlenül a deklarált típust adja vissza, így az eredményt nem kell visszakattintani az objektumból.
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(); } } }
Ebben a példában a verem Stack-ként van deklarálva. , tehát csak karakterlánc értékeket fogad el. A Pop metódus közvetlenül egy karakterláncot ad vissza, és kinyomtatja Python, az utolsóként beírt érték. Minden új projekt esetében az általános Stack az ajánlott választás.
Különbség a verem és a sor között C#-ban
Egy halom és egy sorban áll mindkettő olyan gyűjtemény, amely az elemek eltávolításának sorrendjét szabályozza, de ellentétes szabályokat alkalmaznak. Egy verem az utolsóként be, először ki, míg egy sor az elsőként be, először ki. A megfelelő kiválasztása egyértelművé teszi a kódod szándékát a többi fejlesztő számára.
A fő különbségek az alábbiakban felsorolva vannak:
- Sorrend: Egy verem először a legutóbb hozzáadott elemet távolítja el (LIFO), míg egy sor a legrégebbi elemet távolítja el először (FIFO).
- Módszerek: Egy verem Push és Pop metódusokat használ, míg egy sor az Enqueue metódust használja a hozzáadáshoz, a Dequeue metódust pedig az eltávolításhoz.
- Felső szintű hozzáférés: Egy verem a Peek segítségével olvassa be a következő elemét, egy sor pedig a Peek segítségével olvassa be elölről a következő elemét.
- Tipikus felhasználások: A veremekhez illeszkedő visszavonási funkciók, kifejezéskiértékelés és rekurzió trackirály, míg a várólisták illeszkednek az ütemezéshez, a puffereléshez és a szélesség-első bejáráshoz.
Mindkét típus generikus formában, Stack néven kapható. és a sor a System.Collections.Generic fájlban, így mindkét választási lehetőséggel típusbiztonságot kapsz.





