Uwaga: nie mylić z generyczną wersją Stack<T>
.
Stack stos = new Stack();
using System.Collections;
Możemy bez problemu dodawać byty różnych typów.
Do dodania czegoś na stos służy metoda Push
. Elementy dodawany jest na koniec stosu. Elementy mogą się powtarzać.
Za pomocą foreach
. Kolejność zgodnie z zasadą LIFO (last-in, first-out).
Metoda dedykowana dla stosu aby tylko zwrócić ostatni element: Peek()
. Pierwszego wprost nie możemy zwrócić.
Możemy użyć także metody Pop
która zwraca i usuwa ostatni element ze stosu.
Możemy bezpośrednio zwrócić tylko ostatni. Zwrócenie pozostałych nie jest możliwe.
Bezpośrednio nie można.
Poprzez pobranie właściwości: Count
.
Poprzez metodę Contains
.
Przykładowy kod:
Stack stos = new Stack();
stos.Push(4);
stos.Push("fdg");
stos.Push(-2);
Console.WriteLine(stos.Contains(4)); //true
Console.WriteLine(stos.Contains(0)); //false
Warto pamiętać, że dla typów referencyjnych sprawdzamy odwołanie.
np. dla klasy Osoba
:
class Osoba
{
string imie;
public Osoba(string imie)
{
this.imie = imie;
}
}
taki kod zawsze zwróci false
:
Stack osoby = new Stack();
osoby.Push(new Osoba("Jan"));
osoby.Push(new Osoba("Anna"));
osoby.Push(new Osoba("Jan"));
Console.WriteLine(osoby.Contains(new Osoba("Jan")));
Poprawnie powinniśmy zadeklarować zmienną refencyjną poza stosem:
Osoba o1 = new Osoba("Jan");
Osoba o2 = new Osoba("Anna");
Stack osoby = new Stack();
osoby.Push(o1);
osoby.Push(o2);
Console.WriteLine(osoby.Contains(o1));
Jak można odwrócić elementy na stosie? w tym kontekście chodzi o odwrócenie kolejności (a nie odwrotne sortowanie)
Bezpośrednio nie ma takiej możliwości. Możemy stworzyć "stos" pomocniczy, a potem zamienić odwołanie do właściwego stosu.
Za pomocą metody Pop
która usuwa i zwraca ostatni element na stosie. Innych nie możemy bezpośrednio.