Stos C# z przykładami Push & Pop
⚡ Inteligentne podsumowanie
Stos w języku C# to kolekcja z przestrzeni nazw System.Collections, która stosuje zasadę „ostatni wszedł, pierwszy wyszedł” (LIFO), w której metoda Push dodaje element na górze, a metoda Pop go usuwa.

Co to jest stos w języku C#?
Stos to specjalna kolekcja przypadków, która reprezentuje koncepcję „ostatnie weszło, pierwsze wyszło” (LIFO). Aby najpierw zrozumieć LIFO, weźmy przykład. Wyobraź sobie stos książek, z których każda jest ułożona jedna na drugiej.
Koncepcja „ostatni weszło, pierwsze wyszło” w przypadku książek oznacza, że ze stosu książek można usunąć tylko książkę znajdującą się najwyżej. Nie ma możliwości usunięcia książki pomiędzy nimi, gdyż zaburzyłoby to ustawienie stosu.
Stąd w C#, stos działa w ten sam sposób. Elementy są dodawane do stosu, jeden na drugim. Proces dodawania elementu do stosu nazywa się operacją push. Aby usunąć element ze stosu, możesz również usunąć najwyższy element stosu. Operacja ta jest znana jako pop.
Przyjrzyjmy się bliżej operacjom dostępnym dla kolekcji Stack.
Deklaracja stosu
Stos tworzony jest za pomocą typu Stack Data. Słowo kluczowe „nowy” służy do tworzenia obiektu stosu. Obiekt zostaje następnie przypisany do zmiennej st.
Stack st = new Stack()
Dodawanie elementów do stosu
Metoda push służy do dodawania elementu na stos. Ogólna składnia instrukcji jest podana poniżej.
Stack.push(element)
Usuwanie elementów ze stosu
Metoda pop jest używana do usuwania elementu ze stosu. Operacja pop zwróci najwyższy element stosu. Ogólna składnia polecenia jest podana poniżej
Stack.pop()
Liczyć
Ta właściwość służy do pobierania liczby elementów na stosie. Poniżej znajduje się ogólna składnia tego stwierdzenia.
Stack.Count
zawiera
Ta metoda służy do sprawdzania, czy element znajduje się na stosie. Poniżej znajduje się ogólna składnia tego stwierdzenia. Instrukcja zwróci wartość true, jeśli element istnieje, w przeciwnym razie zwróci wartość false.
Stack.Contains(element)
Zobaczmy teraz, jak to działa na poziomie kodu. Cały poniższy kod zostanie zapisany w pliku nasz Aplikacja konsoli. Kod zostanie zapisany w naszym pliku Program.cs.
W poniższym programie napiszemy kod, aby zobaczyć, jak możemy wykorzystać powyższe metody.
Przykład 1: Metoda Stack.Push().
W tym przykładzie zobaczymy
- Jak powstaje stos.
- Jak wyświetlić elementy stosu i użyć metod Count i Contain.
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 Wyjaśnienie:-
- Pierwszy krok służy do zadeklarowania stosu. Tutaj deklarujemy „st” jako zmienną przechowującą elementy naszego stosu.
- Następnie dodajemy 3 elementy do naszego stosu. Każdy element dodawany jest metodą Push.
- Teraz, ponieważ nie można uzyskać dostępu do elementów stosu poprzez pozycję indeksu, np lista tablic, musimy zastosować inne podejście do wyświetlania elementów stosu. Obiekt (obj) jest zmienną tymczasową, która jest zadeklarowana do przechowywania każdego elementu stosu. Następnie używamy instrukcji foreach, aby przejść przez każdy element stosu. Dla każdego elementu stosu wartość jest przypisana do zmiennej obj. Następnie używamy polecenia Console.Writeline, aby wyświetlić wartość na konsoli.
- Używamy właściwości Count (liczba st), aby uzyskać liczbę elementów na stosie. Ta właściwość zwróci liczbę. Następnie wyświetlamy tę wartość na konsoli.
- Następnie używamy metody Zawiera, aby sprawdzić, czy na naszym stosie znajduje się wartość 3. To zwróci wartość true lub false. Następnie wyświetlamy tę zwracaną wartość na konsoli.
Jeżeli powyższy kod zostanie wpisany poprawnie i program zostanie uruchomiony, wyświetlony zostanie następujący wynik.
Wyjście:
Z wyjścia możemy zobaczyć, że elementy stosu są wyświetlane. Ponadto wyświetlana jest wartość True, aby powiedzieć, że wartość 3 jest zdefiniowana na stosie.
Note: Zauważyłeś, że ostatni element włożony na stos jest wyświetlany jako pierwszy. Jest to najwyższy element stosu. Liczba elementów stosu jest również wyświetlana w wyjściu.
Przykład 2: Metoda Stack.Pop().
Przyjrzyjmy się teraz funkcji „usuń”. Zobaczymy kod wymagany do usunięcia najwyższego elementu ze stosu.
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 Wyjaśnienie:-
- Tutaj po prostu wydajemy metodę pop, która służy do usuwania elementu ze stosu.
Jeżeli powyższy kod zostanie wpisany poprawnie i program zostanie uruchomiony, wyświetlony zostanie następujący wynik.
Wyjście:
Widzimy, że element 3 został usunięty ze stosu.
Metoda C# Stack Peek()
Metody Push i Pop działają na szczycie stosu, ale czasami wystarczy spojrzeć na element na szczycie bez jego usuwania. Metoda Peek robi dokładnie to samo. Zwraca najwyższą wartość stosu, pozostawiając kolekcję bez zmian, co jest przydatne, gdy chcesz przetestować kolejny element przed podjęciem decyzji o jego usunięciu.
Krok 1) Utwórz stos i umieść na nim trzy elementy tak, aby wartość 3 znalazła się na górze.
Krok 2) Wywołaj metodę Peek, aby odczytać górny element, a następnie sprawdź właściwość Count, aby upewnić się, że nic nie zostało usunięte.
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 Wyjaśnienie:-
- Deklarowany jest stos o nazwie st, a wartości 1, 2 i 3 są dodawane za pomocą metody Push, więc 3 staje się elementem znajdującym się na szczycie stosu.
- Metoda Peek zwraca najwyższy element bez usuwania go, a właściwość Count nadal raportuje pełną liczbę elementów w stosie.
Po uruchomieniu programu drukowana jest wartość 3 z Peek i następnie liczenie 3, co dowodzi, że element pozostaje na stosie. Jeśli stos jest pusty, Peek zgłasza błąd InvalidOperationException, więc przed jego wywołaniem można bezpiecznie sprawdzić wartość Count.
Stos ogólny w C#
Powyższe przykłady wykorzystują niegeneryczną klasę Stack z System.Collections, która przechowuje każdy element jako obiekt. Współczesny kod C# zazwyczaj preferuje generyczną klasę Stack. Klasa z przestrzeni nazw System.Collections.Generic. Wiąże stos z jednym zadeklarowanym typem, dzięki czemu kompilator sprawdza każde polecenie Push i Pop, bez potrzeby rzutowania ani pakowania.
Główne korzyści wynikające z ogólnego stosu są wymienione poniżej.
- Bezpieczeństwo typu: Typ jest ustalany podczas deklaracji, więc można przesyłać tylko wartości tego typu, a błędy są wychwytywane w momencie kompilacji.
- Bez boksu: Typy wartości, takie jak int, są przechowywane bezpośrednio, co pozwala uniknąć kosztów pakowania, które ponosi stos niegeneryczny.
- Czyściciel czyta: Pop i Peek zwracają zadeklarowany typ bezpośrednio, więc nie trzeba rzutować wyniku z obiektu.
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(); } } }
W tym przykładzie stos jest zadeklarowany jako Stack , więc akceptuje tylko wartości typu string. Metoda Pop zwraca bezpośrednio ciąg znaków i drukuje Python, ostatnia wprowadzona wartość. W przypadku każdego nowego projektu, ogólny stos jest zalecanym wyborem.
Różnica między stosem a kolejką w języku C#
Stos i kolejka Obie kolekcje kontrolują kolejność usuwania elementów, ale stosują odwrotne reguły. Stos działa na zasadzie „ostatni wszedł, pierwszy wyszedł”, a kolejka na zasadzie „pierwszy wszedł, pierwszy wyszedł”. Wybór odpowiedniej reguły sprawia, że intencja Twojego kodu staje się jasna dla innych programistów.
Poniżej wymieniono najważniejsze różnice:
- Zamówienie: Stos usuwa najpierw ostatnio dodany element (LIFO), natomiast kolejka usuwa najpierw najstarszy element (FIFO).
- metody: Stos używa operacji Push i Pop, natomiast kolejka używa operacji Enqueue do dodawania i Dequeue do usuwania.
- Dostęp do najwyższego elementu: Stos odczytuje swój następny element za pomocą Peek, a kolejka odczytuje swój następny element za pomocą Peek od przodu.
- Typowe zastosowania: Stosy obejmują funkcje cofania, ocenę wyrażeń i rekurencję trackról, podczas gdy kolejki dopasowują się do harmonogramu, buforowania i przeglądania wszerz.
Oba typy są dostępne w formie generycznej jako Stack i kolejka w System.Collections.Generic, dzięki czemu przy każdym wyborze zyskujesz bezpieczeństwo typu.




