C# Stack met Push & Pop-voorbeelden
โก Slimme samenvatting
Stack in C# is een verzameling uit de namespace System.Collections die het LIFO-principe (Last In, First Out) volgt, waarbij de Push-methode een element aan de bovenkant toevoegt en de Pop-methode het verwijdert.

Wat is stapelen in C#?
De stapel is een speciale koffercollectie die een last in first out (LIFO) concept vertegenwoordigt. Laten we, om LIFO eerst te begrijpen, een voorbeeld nemen. Stel je een stapel boeken voor, waarbij elk boek op elkaar wordt gehouden.
Het concept van โlast in first outโ in het geval van boeken betekent dat alleen het bovenste boek van de stapel boeken kan worden verwijderd. Het is niet mogelijk om er een boek tussenuit te halen, omdat dat de stand van de stapel zou verstoren.
Vandaar in C#, de stapel werkt ook op dezelfde manier. Elementen worden toegevoegd aan de stapel, รฉรฉn boven op elkaar. Het proces van het toevoegen van een element aan de stapel wordt een push-bewerking genoemd. Om een โโelement van een stapel te verwijderen, kunt u ook het bovenste element van de stapel verwijderen. Deze bewerking staat bekend als pop.
Laten we de bewerkingen die beschikbaar zijn voor de Stack-collectie eens nader bekijken.
Declaratie van de stapel
Er wordt een stapel gemaakt met behulp van het type Stack Data. Het trefwoord โnieuwโ wordt gebruikt om een โโobject van een stapel te maken. Het object wordt vervolgens toegewezen aan de variabele st.
Stack st = new Stack()
Elementen toevoegen aan de stapel
De push-methode wordt gebruikt om een โโelement aan de stapel toe te voegen. De algemene syntaxis van de verklaring wordt hieronder gegeven.
Stack.push(element)
Elementen uit de stapel verwijderen
De pop-methode wordt gebruikt om een โโelement van de stapel te verwijderen. De pop-bewerking retourneert het bovenste element van de stapel. De algemene syntaxis van de verklaring wordt hieronder gegeven
Stack.pop()
Tellen
Deze eigenschap wordt gebruikt om het aantal items in de stapel te bepalen. Hieronder vindt u de algemene syntaxis van deze verklaring.
Stack.Count
Bevat
Deze methode wordt gebruikt om te zien of een element aanwezig is in de Stack. Hieronder vindt u de algemene syntaxis van deze verklaring. De instructie retourneert true als het element bestaat, anders wordt de waarde false geretourneerd.
Stack.Contains(element)
Laten we nu eens kijken hoe dit werkt op codeniveau. Alle onderstaande code wordt naar ons geschreven Console applicatie. De code wordt naar ons Program.cs-bestand geschreven.
In het onderstaande programma zullen we de code schrijven om te zien hoe we de bovengenoemde methoden kunnen gebruiken.
Voorbeeld 1: Stack.Push()-methode
In dit voorbeeld zullen we zien
- Hoe een stapel ontstaat.
- Hoe u de elementen van de stapel kunt weergeven en de methoden Count en Contain kunt gebruiken.
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 Uitleg:-
- De eerste stap wordt gebruikt om de stapel te declareren. Hier declareren we โstโ als een variabele om de elementen van onze stapel vast te houden.
- Vervolgens voegen we 3 elementen toe aan onze stapel. Elk element wordt toegevoegd via de Push-methode.
- Omdat de stapelelementen nu niet toegankelijk zijn via de indexpositie zoals de array lijst, moeten we een andere aanpak gebruiken om de elementen van de stapel weer te geven. Het object (obj) is een tijdelijke variabele, die wordt gedeclareerd voor het bevatten van elk element van de stapel. Vervolgens gebruiken we de foreach-instructie om elk element van de stapel te doorlopen. Voor elk stapelelement wordt de waarde toegewezen aan de obj-variabele. Vervolgens gebruiken we de opdracht Console.Writeline om de waarde op de console weer te geven.
- We gebruiken de eigenschap Count (st.telling) om het aantal items in de stapel te bepalen. Deze eigenschap retourneert een nummer. Vervolgens geven we deze waarde weer aan de console.
- Vervolgens gebruiken we de methode Bevat om te zien of de waarde 3 aanwezig is in onze stapel. Dit retourneert een waarde waar of onwaar. Vervolgens geven we deze retourwaarde weer op de console.
Als de bovenstaande code correct is ingevoerd en het programma wordt uitgevoerd, wordt de volgende uitvoer weergegeven.
Output:
Uit de uitvoer kunnen we zien dat de elementen van de stapel worden weergegeven. Ook wordt de waarde True weergegeven om aan te geven dat de waarde 3 op de stapel is gedefinieerd.
Note: U hebt opgemerkt dat het laatste element dat op de stapel is geduwd, als eerste wordt weergegeven. Dit is het bovenste element van de stapel. Het aantal stapelelementen wordt ook weergegeven in de uitvoer.
Voorbeeld 2: Stack.Pop()-methode
Laten we nu eens kijken naar de functionaliteit "verwijderen". We zullen de code zien die nodig is om het bovenste element van de stapel te verwijderen.
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 Uitleg:-
- Hier gebruiken we alleen de pop-methode die wordt gebruikt om een โโelement uit de stapel te verwijderen.
Als de bovenstaande code correct is ingevoerd en het programma wordt uitgevoerd, wordt de volgende uitvoer weergegeven.
Output:
We kunnen zien dat element 3 van de stapel is verwijderd.
C# Stack Peek() methode
De methoden `push` en `pop` werken met de bovenkant van de stack, maar soms wil je alleen het bovenste element bekijken zonder het te verwijderen. De `peek`-methode doet precies dat. Deze retourneert de bovenste waarde van de stack, terwijl de rest van de collectie ongewijzigd blijft. Dit is handig als je het volgende item wilt bekijken voordat je besluit het te verwijderen.
Stap 1) Maak een stapel en plaats er drie elementen op, zodat de waarde 3 bovenaan komt te liggen.
Stap 2) Roep de Peek-methode aan om het bovenste element te lezen en controleer vervolgens de Count-eigenschap om te bevestigen dat er niets is verwijderd.
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 Uitleg:-
- Er wordt een stapel met de naam st gedeclareerd, en de waarden 1, 2 en 3 worden toegevoegd met de Push-methode, waardoor 3 het bovenste element wordt.
- De Peek-methode retourneert het bovenste element zonder het te verwijderen, en de Count-eigenschap geeft nog steeds het totale aantal items in de stapel weer.
Wanneer het programma wordt uitgevoerd, print het de waarde. 3 vanaf Peek en vervolgens de telling 3Dit bewijst dat het element op de stapel blijft. Als de stapel leeg is, gooit Peek een Invalid-fout.OperationException, dus het is veilig om Count te controleren voordat je de functie aanroept.
Generieke stapel in C#
De bovenstaande voorbeelden gebruiken de niet-generieke Stack-klasse uit System.Collections, die elk element als een object opslaat. Moderne C#-code geeft doorgaans de voorkeur aan de generieke Stack-klasse. Deze klasse komt uit de namespace System.Collections.Generic. De stack wordt gekoppeld aan รฉรฉn enkel gedeclareerd type, waardoor de compiler elke Push- en Pop-bewerking controleert en er geen typeconversie of boxing nodig is.
De belangrijkste voordelen van de generieke Stack staan โโhieronder vermeld.
- Type veiligheid: Het type wordt vastgelegd bij de declaratie, waardoor alleen waarden van dat type kunnen worden toegevoegd en fouten tijdens het compileren worden opgespoord.
- Geen boksen: Waardetypen zoals int worden direct opgeslagen, waardoor de kosten van het omzetten naar een ander gegevenstype, die bij de niet-generieke Stack wel gelden, worden vermeden.
- Schoner leest: Pop en Peek retourneren direct het gedeclareerde type, dus je hoeft het resultaat niet terug te casten van object.
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(); } } }
In dit voorbeeld wordt de stack gedeclareerd als Stack. Het accepteert dus alleen tekenreekswaarden. De Pop-methode retourneert direct een tekenreeks en print deze af. Python, de laatst toegevoegde waarde. Voor elk nieuw project is de generieke Stack is de aanbevolen keuze.
Verschil tussen Stack en Queue in C#
Een stapel en een queue Zowel stacks als queues bepalen de volgorde waarin elementen worden verwijderd, maar ze hanteren tegengestelde regels. Een stack werkt volgens het principe 'laatst erin, eerst eruit', terwijl een queue volgens het principe 'eerst erin, eerst eruit' werkt. Door de juiste te kiezen, maak je de bedoeling van je code duidelijk voor andere ontwikkelaars.
De belangrijkste verschillen staan โโhieronder vermeld:
- Bestellen: Een stapel verwijdert eerst het meest recent toegevoegde element (LIFO), terwijl een wachtrij eerst het oudste element verwijdert (FIFO).
- Methoden: Een stack gebruikt Push en Pop, terwijl een queue Enqueue gebruikt om elementen toe te voegen en Dequeue om elementen te verwijderen.
- Toegang tot het bovenste element: Een stapel leest het volgende item met Peek, en een wachtrij leest het volgende item met Peek vanaf de voorkant.
- Typische toepassingen: Stacks bieden mogelijkheden voor ongedaan maken, expressie-evaluatie en recursie. trackoning, terwijl wachtrijen geschikt zijn voor planning, buffering en breedte-eerst-traversal.
Beide typen zijn beschikbaar in een generieke vorm als Stack. en wachtrij in System.Collections.Generic, dus je profiteert van typeveiligheid met beide opties.




