Co to jest std :: stack?
Stos to struktura danych działająca w oparciu o technikę LIFO (Last In First Out). Std :: stack umożliwia dodawanie i usuwanie elementów tylko z jednego końca.
Klasa std :: stack jest adapterem kontenera. Obiekty kontenerów przechowują dane o podobnym typie danych. Możesz utworzyć stos z różnych kontenerów sekwencji. Jeśli kontener nie zostanie podany, domyślnie zostanie użyty kontener deque. Adaptery kontenerów nie obsługują iteratorów, więc nie można ich używać do manipulowania danymi.
W tym samouczku C ++ nauczysz się
- Co to jest std :: stack?
- Składnia stosu
- Typy członków
- Operacje w stosie
- Implementacja stosu
- push () i pop ()
- pusty (), rozmiar (), góra ()
- embrace () i swap ()
- Stos w STL
Składnia stosu
Aby utworzyć stos, musimy dołączyć plik nagłówkowy
template> class stack;
- Type - to typ elementu zawartego w std :: stack. Może to być dowolny prawidłowy typ C ++ lub nawet typ zdefiniowany przez użytkownika.
- Kontener - to typ bazowego obiektu kontenera.
Typy członków
Oto typy elementów stosu:
- typ_wartości - pierwszy parametr szablonu, T. Oznacza typy elementów.
- typ_kontenera - drugi parametr szablonu, kontener. Oznacza podstawowy typ kontenera.
- size_type - typ całkowity bez znaku.
Operacje w stosie
Stos C ++ obsługuje następujące podstawowe operacje:
- push - dodaje / odkłada element do stosu.
- pop - usuwa / zdejmuje element ze stosu.
- peek - zwraca górny element stosu bez usuwania go.
- isFull - sprawdza, czy stos jest pełny.
- isEmpty - sprawdza, czy stos jest pusty.
Implementacja stosu
Krok 1) Początkowo mamy pusty stos. Wierzchołek pustego stosu jest ustawiany na -1.
Krok 2) Następnie włożyliśmy element 5 do stosu. Wierzchołek stosu będzie wskazywał na element 5.
Krok 3) Następnie włożyliśmy element 50 do stosu. Szczyt stosu przesuwa się i wskazuje element 50.
Krok 4) Następnie wykonaliśmy operację wyskakującą, usuwając górny element ze stosu. Element 50 jest zdejmowany ze stosu. Wierzchołek stosu wskazuje teraz na element 5.
push () i pop ()
Funkcje stack :: push () dodają nowy element na szczyt stosu. Rozmiar stosu jest zwiększany o 1 po włożeniu. Funkcja przyjmuje następującą składnię:
stack.push(value)
Wartość to element, który ma zostać wstawiony do stosu.
Funkcja stack :: pop () usuwa górny element stosu. To najnowszy przedmiot w stosie. Rozmiar stosu zmniejsza się o 1 po usunięciu. Oto składnia funkcji:
stack.pop()
Funkcja nie przyjmuje parametrów.
Przykład 1:
#include#include using namespace std;int main() {stack st;st.push(10);st.push(20);st.push(30);st.push(40);st.pop();st.pop();while (!st.empty()) {cout << ' ' << st.top();st.pop();}}
Wynik:
Oto zrzut ekranu kodu:
Objaśnienie kodu:
- Dołącz plik nagłówkowy iostream do naszego kodu, aby móc korzystać z jego funkcji.
- Dołącz plik nagłówka stosu do naszego kodu, aby móc korzystać z jego funkcji.
- Uwzględnij przestrzeń nazw std w naszym kodzie, aby używać jej klas bez wywoływania jej.
- Wywołaj funkcję main (). W ramach tej funkcji należy dodać logikę programu.
- Utwórz stos st, aby przechowywać wartości całkowite.
- Użyj funkcji push (), aby wstawić wartość 10 do stosu.
- Użyj funkcji push (), aby wstawić wartość 20 do stosu.
- Użyj funkcji push (), aby wstawić wartość 30 do stosu.
- Użyj funkcji push (), aby wstawić wartość 40 do stosu.
- Użyj funkcji pop (), aby usunąć górny element ze stosu, czyli 40. Górny element ma teraz wartość 30.
- Użyj funkcji pop (), aby usunąć górny element ze stosu, czyli 30. Górny element ma teraz wartość 20.
- Użyj pętli while i funkcji empty (), aby sprawdzić, czy stos NIE jest pusty. The! jest operatorem NOT.
- Drukowanie aktualnej zawartości stosu na konsoli.
- Wywołaj funkcję pop () na stosie.
- Koniec treści pętli while.
- Koniec treści funkcji main ().
pusty (), rozmiar (), góra ()
Stosy mają wbudowane funkcje, których możesz użyć do zabawy ze stosem i jego wartościami. Obejmują one:
- empty () - sprawdza, czy stos jest pusty, czy nie.
- size () - zwraca rozmiar stosu, czyli liczbę elementów w stosie.
- top () - uzyskuje dostęp do elementu stosu na górze.
Przykład 2:
#include#include using namespace std;void createStack(stack mystack){stack ms = mystack;while (!ms.empty()){cout << '\t' << ms.top();ms.pop();}cout << '\n';}int main(){stack st;st.push(32);st.push(21);st.push(39);st.push(89);st.push(25);cout << "The stack st is: ";createStack(st);cout << "\n st.size() : " << st.size();cout << "\n st.top() : " << st.top();cout << "\n st.pop() : ";st.pop();createStack(st);return 0;}
Wynik:
Oto zrzut ekranu kodu:
Objaśnienie kodu:
- Dołącz plik nagłówkowy iostream do naszego kodu, aby móc korzystać z jego funkcji.
- Dołącz plik nagłówka stosu do naszego kodu, aby móc korzystać z jego funkcji.
- Dołącz przestrzeń nazw std do naszego programu, aby używać jej klas bez wywoływania jej.
- Utwórz funkcję createStack, której możemy użyć do utworzenia mystack stosu. Stos będzie zawierał zbiór liczb całkowitych.
- Początek treści funkcji createStack.
- Utwórz instancję typu mystack i nadaj jej nazwę ms.
- Użyj pętli while i funkcji empty (), aby sprawdzić, czy stos jest pusty.
- Początek treści pętli while.
- Użyj funkcji top () przechowywanej na górze stosu. Znak \ t utworzy nową kartę.
- Użyj funkcji pop (), aby usunąć element znajdujący się na szczycie stosu.
- Koniec treści pętli while.
- Wydrukuj pusty wiersz na konsoli.
- Koniec treści funkcji createStack.
- Wywołaj funkcję main (). Logikę programu należy dodać w treści funkcji main ().
- Początek treści funkcji main ().
- Utwórz obiekt stosu st.
- Użyj funkcji push (), aby wstawić element 32 do stosu.
- Użyj funkcji push (), aby wstawić element 21 do stosu.
- Użyj funkcji push (), aby wstawić element 39 do stosu.
- Użyj funkcji push (), aby wstawić element 89 do stosu.
- Użyj funkcji push (), aby wstawić element 25 do stosu.
- Wydrukuj tekst na konsoli.
- Wywołaj funkcję createStack, aby wykonać powyższe operacje wstawiania na stosie.
- Wydrukuj rozmiar stosu na konsoli obok innego tekstu.
- Wydrukuj element na szczycie stosu na konsoli.
- Wydrukuj tekst na konsoli.
- Usuń element na górze stosu. Następnie zwróci elementy pozostałe w stosie.
- Wywołaj funkcję createStack, aby wykonać powyższe operacje.
- Program musi zwrócić wartość po pomyślnym zakończeniu.
- Koniec treści funkcji main ().
embrace () i swap ()
Oto inne wbudowane funkcje stosu:
- embrace () - konstruuje, a następnie wstawia nowy element na szczyt stosu.
- swap () - zamienia zawartość stosu na zawartość innego stosu.
Przykład 3:
#include#include #include using namespace std;int main() {stack st1;stack st2;st1.emplace(12);st1.emplace(19);st2.emplace(20);st2.emplace(23);st1.swap(st2);cout << "st1 = ";while (!st1.empty()) {cout << st1.top() << " ";st1.pop();}cout << endl << "st2 = ";while (!st2.empty()) {cout << st2.top() << " ";st2.pop();}}
Wynik:
Oto zrzut ekranu kodu:
Objaśnienie kodu:
- Dołącz plik nagłówkowy iostream do naszego kodu, aby móc korzystać z jego funkcji.
- Dołącz plik nagłówka stosu do naszego kodu, aby móc korzystać z jego funkcji.
- Dołącz plik nagłówkowy cstdlib do naszego kodu, aby móc korzystać z jego funkcji.
- Uwzględnij przestrzeń nazw std w naszym kodzie, aby używać jej klas bez wywoływania jej.
- Wywołaj funkcję main (). Logika programu zostanie dodana w treści tej funkcji.
- Zadeklaruj stos o nazwie st1 do przechowywania wartości całkowitych.
- Zadeklaruj stos o nazwie st2 do przechowywania wartości całkowitych.
- Użyj funkcji embrace (), aby wstawić liczbę całkowitą 12 do stosu o nazwie st1.
- Użyj funkcji embrace (), aby wstawić liczbę całkowitą 19 do stosu o nazwie st1.
- Użyj funkcji embrace (), aby wstawić liczbę całkowitą 20 do stosu o nazwie st2.
- Użyj funkcji embrace (), aby wstawić liczbę całkowitą 23 do stosu o nazwie st2.
- Użyj funkcji swap (), aby zamienić zawartość dwóch stosów, st1 i st2. Zawartość stosu st1 należy przenieść na stos st2. Zawartość stosu st2 należy przenieść na stos st1.
- Wydrukuj tekst na konsoli.
- Użyj instrukcji while i funkcji empty (), aby sprawdzić, czy stos st1 nie jest pusty.
- Wydrukuj zawartość stosu st1 na konsoli. "" Dodaje odstęp między elementami stosu podczas drukowania ich na konsoli.
- Wykonaj funkcję pop () na stosie st1, aby usunąć górny element.
- Koniec treści instrukcji while.
- Wydrukuj tekst na konsoli. Endl jest słowem kluczowym C ++ oznaczającym linię końcową. Przenosi kursor myszy do następnej linii, aby rozpocząć drukowanie od tego miejsca.
- Użyj instrukcji while i funkcji empty (), aby sprawdzić, czy stos st2 nie jest pusty.
- Wydrukuj zawartość stosu st2 na konsoli. "" Dodaje odstęp między elementami stosu podczas drukowania ich na konsoli.
- Wykonaj funkcję pop () na stosie st2, aby usunąć górny element.
- Koniec treści instrukcji while.
- Koniec treści funkcji main ().
Stos w STL
STL (Standard Template Library) zawiera klasy szablonów, które zapewniają typowe struktury danych C ++. Dlatego stos można również zaimplementować w STL. Po prostu dołączamy tę bibliotekę do naszego kodu i używamy jej do zdefiniowania stosu.
stackst;
Powyższa składnia deklaruje stos st do elementów typu danych T.
Przykład 3:
#include#include #include using namespace std;int main() {stack st;st.push(12);st.push(19);st.push(20);cout << st.top();cout << st.size();}
Wynik:
Oto zrzut ekranu kodu:
Objaśnienie kodu:
- Dołącz plik nagłówkowy iostream do naszego kodu, aby móc korzystać z jego funkcji.
- Dołącz plik nagłówka stosu do naszego kodu, aby móc korzystać z jego funkcji.
- Dołącz plik nagłówkowy cstdlib do naszego kodu, aby móc korzystać z jego funkcji.
- Uwzględnij przestrzeń nazw std w naszym kodzie, aby używać jej klas bez wywoływania jej.
- Wywołaj funkcję main (). Logikę programu należy dodać w treści tej funkcji.
- Zadeklaruj st stosu do przechowywania danych całkowitych.
- Dodaj element 12 do stosu.
- Dodaj element 19 do stosu.
- Dodaj element 20 do stosu.
- Wydrukuj element na szczycie stosu na konsoli.
- Wydrukuj rozmiar stosu na konsoli.
- Koniec treści funkcji main ().
Podsumowanie:
- Stos to struktura danych działająca w oparciu o technikę LIFO (Last In, First Out).
- Std :: stack umożliwia dodawanie i usuwanie elementów tylko z jednego końca.
- Klasa std :: stack jest adapterem kontenera przechowującym elementy o podobnym typie danych.
- Stos można utworzyć z różnych kontenerów sekwencji.
- Jeśli nie podasz kontenera, domyślnie zostanie użyty kontener deque.
- Funkcja push () służy do wstawiania elementów do stosu.
- Funkcja pop () służy do usuwania najwyższego elementu z kroku.
- Funkcja empty () służy do sprawdzania, czy stos jest pusty, czy nie.