C# - Verem kezelő osztály

forráskód letöltése
Ebben a cikkben egy olyan osztályt mutatunk, mely veremszerű tárolást valósít meg tetszőleges számú objektumunkhoz. Vagyis mindig az utolsónak elhelyezett adatot érhetjük el a veremből.
Veremszerű adattároláshoz a Stack osztályból kell egy példányt létrehoznunk. Ezt rögtön a Form-unk deklarációjánál meg is tesszük és létrehozunk egy st nevű változót.
private Stack st = new Stack();
A verembe adatot elhelyezni a Push függvénnyel lehetséges. Paraméterként egy Object típusú objektumot vár, vagyis szinte bármilyen típusú adat elhelyezhető. Mellékelt példában a Push gomb a textBox1-be írt szöveget helyezi el a verembe.
      protected void button1_Click (object sender, System.EventArgs e)
      {
        st.Push(textBox1.Text);
        UpdateLabel1();
      }
Majd az UpdateLabel1 belső függvényünk hívásával elérjük, hogy megjelenjen a veremben lévő elemek darabszáma a label1 komponensen. Ehhez a Stack osztály Count property-ét használjuk fel.
      private void UpdateLabel1 ()
      {
        label1.Text = "Count: " + st.Count.ToString();
      }
A verembe elhelyezett adatokat kiolvasni a Pop függvénnyel lehet. A Pop hívásakor a kiolvasott elem egyúttal eltávolításra is kerül a veremből, tehát az ott tárolt elemek száma is csökken eggyel.
      protected void button2_Click (object sender, System.EventArgs e)
      {
        if (st.Count > 0)
        {
          label2.Text = st.Pop().ToString();
          UpdateLabel1();
        }
      }
A Peek függvény használatával lehetőségünk van arra is, hogy a verem legfelső elemét, hasonlóan a Pop-hoz kiolvassuk, viszont ezt úgy, hogy ez az elem kiolvasás után is megmarad a veremben, vagyis nem kerül eltávolításra mint a Pop esetén.
     protected void button4_Click (object sender, System.EventArgs e)
      {
        if (st.Count > 0)
        {
          label3.Text = st.Peek().ToString();
          UpdateLabel1();
        }
      }
Arra is van lehetőségünk, hogy ne csak a legfelső eleméhez jussunk hozzá a veremnek, hanem a teljes tartalmához, mégpedig úgy, hogy azok ne kerüljenek törlésre. Ehhez a ToArray függvényhívást kell használnunk, mely egy olyan tömböt ad vissza, melynek minden eleme Object típusú. A tömb egyes elemei a verem egyes elemei lesznek. Így például egy foreach ciklussal könnyen végigmehetünk a verem elemein.
     protected void button3_Click (object sender, System.EventArgs e)
      {
        Object[] array = st.ToArray();
        foreach (Object s in array)
        {
          listBox1.Items.Add(s.ToString());
        }
      }
A verem összes elemét törölhetjük egy lépésben, ha a Clear függvényt meghívjuk.
      protected void button5_Click (object sender, System.EventArgs e)
      {
        st.Clear();
        UpdateLabel1();
      }