Een stapel (Stack) is een veelgebruikte datastructuur in de informatica.
Ze werkt volgens het LIFO-principe: Last In, First Out. Het element dat je
als laatste toevoegt, haal je er als eerste weer af.
LIFO — Last In, First Out: het laatst toegevoegde element wordt als eerste verwijderd. De laatste handeling die je uitvoert, is dus de eerste die je weer ongedaan maakt.
Denk aan een stapel borden in een keuken. Een schoon bord leg je boven op de stapel. Heb je een bord nodig, dan neem je het bovenste bord weg, het laatst toegevoegde dus. Wil je een bord ergens in het midden, dan moet je eerst alle borden erboven wegnemen.
Een stapel geeft je dus enkel makkelijk toegang tot het bovenste element. De andere elementen liggen eronder verborgen. Daarom spreken we van beperkte toegang: je werkt altijd langs de bovenkant.
De twee belangrijkste operaties op een stapel zijn:
Push — een element bovenop de stapel leggen (toevoegen);Pop — het bovenste element wegnemen (en teruggeven).Allebei werken ze aan de bovenkant van de stapel:
In het voorbeeld werden achtereenvolgens "A", "B" en "C" op de stapel
gelegd. Een Pop haalt nu eerst "C" weg (het laatst toegevoegde), dan "B",
en pas als laatste "A".
Net als bij een lijst zeg je bij het aanmaken welk type elementen de stapel bevat:
Stack<string> mijnStack = new Stack<string>();
| Methode | Beschrijving | Voorbeeld |
|---|---|---|
stack.Push(element) | Legt een element bovenop de stapel | mijnStack.Push("voorbeeld"); |
stack.Pop() | Leest het bovenste element én verwijdert het | string woord = mijnStack.Pop(); |
stack.Peek() | Leest het bovenste element zonder het te verwijderen | string top = mijnStack.Peek(); |
stack.Clear() | Verwijdert alle elementen van de stapel | mijnStack.Clear(); |
Roep je
Pop()ofPeek()aan op een lege stapel, dan loopt je programma vast met een fout. Controleer daarom eerst metCountof er nog iets op de stapel ligt.
CountDe eigenschap Count geeft het aantal elementen op de stapel terug:
int aantalElementen = mijnStack.Count;
Je kunt een stapel ook met een foreach doorlopen. Omdat een stapel LIFO is, zie
je de elementen dan in omgekeerde volgorde van toevoegen: het laatst
toegevoegde element eerst.
foreach (string element in mijnStack)
{
Console.WriteLine(element);
}
In de volgende oefening beheer je met een stapel de taken van een gebruiker.