A verem egy olyan adatszerkezet, amelyből mindig csak az utolsónak behelyezett elemet tudjuk kivenni. A szakirodalom ezt a a megoldást LIFO (Last In, First Out) szerkezetnek nevezi. A verem szerkezet két alapvető művelettel rendelkezik. Ezek a Push és a Pop. A Push művelet hozzáad egy elemet a verem tartalmához, míg a Pop művelet kiveszi a veremből a legfelső, legutoljára behelyezett elemet.
A verem szerkezet minden számítógépben használatos, a legtöbb processzor hardveresen támogatja a verem adatszerkezetek kezelését. Például függvény1 híváskor a függvény hívás helyének memóriacímét a processzor kiteszi a verembe, majd a függvény végén a veremből visszatölti a memóriacímet, ahonnan a programnak folytatódnia kell.
A verem a .NET belső megvalósításában egy Lista, így a méretezésére ugyanazok a megkötések vonatkoznak. A struktúra megvalósítható lenne láncolt lista segítségével is, viszont akkor az eltávolítás (pop) művelet több időt venne igénybe.
A Stack<T> osztály fontosabb tulajdonságai és metódusai:
Stack(int capacity)
Paraméteres konstruktor. A paraméter a kiindulásként tárolni kívánt elemek számát adja meg.
Stack(IEnumerable<T> collection)
Paraméteres konstruktor. A verem elemei a paraméterként megadott IEnumerable felületet implementáló osztály elemei lesznek.
T Peek()
Visszaadja a verem tetején lévő elemet anélkül, hogy azt kivenné a veremből.
T Pop()
Visszaadja a verem tetején lévő elemet és az elemet eltávolítja a veremből.
void Push(T item)
A paraméterként megadott elemet beilleszti a verem tetejére.
T[] ToArray()
A verem elemeit visszaadja egy tömbben.
void TrimExcess()
Átméretezi a vermet úgy, hogy csak annyi elemnek foglaljon helyet, mint amennyi ténylegesen használva van.
Az alábbi példaprogram a verem kezelését mutatja be:
using System;
using System.Collections.Generic;
namespace PeldaStack
{
class Program
{
static void Main(string[] args)
{
var verem = new Stack<char>();
var be = "VEREM RULEZ";
Console.WriteLine("Verembe írás: {0}", be);
foreach (var chr in be)
{
verem.Push(chr);
}
Console.WriteLine("Veremből kiolvasás:");
while (verem.Count > 0)
{
var karakter = verem.Pop();
Console.Write(karakter);
}
Console.WriteLine();
Console.ReadKey();
}
}
}
A program kimenete:
Verembe írás: VEREM RULEZ
Verembol kiolvasás:
ZELUR MEREV
Implementált interfészek
-
Objektum orientált környezetben metódusoknak nevezzük őket, assembly és gép közeli nyelvek esetén függvény vagy eljárás, esetlegesen szubrutin néven ismertek.↩