Co je std :: stack?
Zásobník je datová struktura, která funguje na základě techniky LIFO (Last In First Out). Std :: stack umožňuje přidávání a odebírání prvků pouze z jednoho konce.
Třída std :: stack je adaptér kontejneru. Kontejnerové objekty obsahují data podobného datového typu. Můžete vytvořit zásobník z různých kontejnerů sekvence. Pokud není k dispozici žádný kontejner, bude ve výchozím nastavení použit deque containe. Kontejnerové adaptéry nepodporují iterátory, takže jej nelze použít k manipulaci s daty.
V tomto výukovém programu C ++ se naučíte
- Co je std :: stack?
- Syntaxe zásobníku
- Typy členů
- Operace v zásobníku
- Stack Implementation
- push () a pop ()
- empty (), size (), top ()
- emplace () a swap ()
- Stack v STL
Syntaxe zásobníku
Chcete-li vytvořit zásobník, musíme do našeho kódu zahrnout záhlaví
template> class stack;
- Typ - je typ prvku obsaženého v std :: stacku. Může to být jakýkoli platný typ C ++ nebo dokonce uživatelem definovaný typ.
- Kontejner - je typ podkladového kontejnerového objektu.
Typy členů
Zde jsou typy členů zásobníku:
- value_type- první parametr šablony, T. Označuje typy prvků.
- container_type- Druhý parametr šablony, kontejner. Označuje podkladový typ kontejneru.
- size_type- nepodepsaný integrální typ.
Operace v zásobníku
Zásobník C ++ podporuje následující základní operace:
- push - Přidá / posune položku do zásobníku.
- pop - odebere / vyskočí položku ze zásobníku.
- peek - Vrátí horní položku zásobníku, aniž by ji odstranil.
- isFull - Zkontroluje, zda je zásobník plný.
- isEmpty - Zkontroluje, zda je zásobník prázdný.
Stack Implementation
Krok 1) Zpočátku máme prázdný zásobník. Horní část prázdného zásobníku je nastavena na -1.
Krok 2) Dále jsme vložili prvek 5 do zásobníku. Horní část zásobníku bude ukazovat na prvek 5.
Krok 3) Dále jsme vložili prvek 50 do zásobníku. Horní část stohu se posune a ukazuje na prvek 50.
Krok 4) Poté jsme provedli popovou operaci, kdy jsme odstranili horní prvek ze zásobníku. Prvek 50 je vysunut ze zásobníku. Horní část zásobníku nyní ukazuje na prvek 5.
push () a pop ()
Funkce stack :: push () přidá novou položku do horní části zásobníku. Velikost zásobníku se po vložení zvětší o 1. Funkce má tuto syntaxi:
stack.push(value)
Hodnota je položka, která se má vložit do zásobníku.
Funkce stack :: pop () odstraní horní prvek zásobníku. Toto je nejnovější položka v zásobníku. Po odebrání se velikost stohu zmenší o 1. Zde je syntaxe funkce:
stack.pop()
Funkce nemá žádné parametry.
Příklad 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();}}
Výstup:
Zde je snímek obrazovky s kódem:
Vysvětlení kódu:
- Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví iostream.
- Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví zásobníku.
- Zahrňte do našeho kódu std namespace, abyste mohli používat jeho třídy, aniž byste jej volali.
- Zavolejte funkci main (). Logika programu by měla být přidána do této funkce.
- Vytvořte zásobník st pro uložení celočíselných hodnot.
- Pomocí funkce push () vložte hodnotu 10 do zásobníku.
- Pomocí funkce push () vložte hodnotu 20 do zásobníku.
- Pomocí funkce push () vložte hodnotu 30 do zásobníku.
- Pomocí funkce push () vložte hodnotu 40 do zásobníku.
- Pomocí funkce pop () odeberte horní prvek ze zásobníku, tedy 40. Horní prvek se nyní změní na 30.
- Pomocí funkce pop () odeberte horní prvek ze zásobníku, tedy 30. Horní prvek se nyní změní na 20.
- Pomocí funkce while a empty () zkontrolujte, zda zásobník NENÍ prázdný. The! není operátor NOT.
- Tisk aktuálního obsahu zásobníku na konzoli.
- Zavolejte funkci pop () na zásobníku.
- Konec těla while smyčky.
- Konec hlavního () funkčního těla.
empty (), size (), top ()
Zásobníky mají vestavěné funkce, které můžete použít k hraní se zásobníkem a jeho hodnotami. Tyto zahrnují:
- empty () - zkontroluje, zda je zásobník prázdný nebo ne.
- size () - vrátí velikost zásobníku, tj. počet prvků v zásobníku.
- top () - přistupuje k prvku zásobníku v horní části.
Příklad 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;}
Výstup:
Zde je snímek obrazovky s kódem:
Vysvětlení kódu:
- Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví iostream.
- Zahrňte soubor záhlaví zásobníku do našeho kódu, abyste mohli používat jeho funkce.
- Zahrňte do našeho programu std namespace, abyste mohli používat jeho třídy, aniž byste jej volali.
- Vytvořte funkci createStack, kterou můžeme použít k vytvoření zásobníku mystack. Zásobník pojme sadu celých čísel.
- Začátek těla funkce createStack.
- Vytvořte instanci datového typu mystack a pojmenujte ji ms.
- Pomocí smyčky while a funkce empty () zkontrolujte, zda je zásobník prázdný.
- Začátek těla smyčky while.
- Použijte funkci top () uloženou v horní části zásobníku. Znak \ t vytvoří novou záložku.
- Pomocí funkce pop () odstraňte prvek v horní části zásobníku.
- Konec těla while smyčky.
- Vytiskněte na konzole prázdný řádek.
- Konec těla funkce createStack.
- Zavolejte funkci main (). Logika programu by měla být přidána do těla funkce main ().
- Začátek těla funkce main ().
- Vytvořte objekt zásobníku st.
- Pomocí funkce push () vložte prvek 32 do zásobníku.
- Pomocí funkce push () vložte prvek 21 do zásobníku.
- Pomocí funkce push () vložte prvek 39 do zásobníku.
- Pomocí funkce push () vložte prvek 89 do zásobníku.
- Pomocí funkce push () vložte prvek 25 do zásobníku.
- Vytiskněte nějaký text na konzoli.
- Voláním funkce createStack provedete výše uvedené operace vložení do zásobníku.
- Vytiskněte velikost stohu na konzole spolu s dalším textem.
- Vytiskněte prvek v horní části stohu na konzole.
- Vytiskněte nějaký text na konzoli.
- Odstraňte prvek v horní části zásobníku. Poté vrátí prvky zbývající v zásobníku.
- Voláním funkce createStack provedete výše uvedené operace.
- Po úspěšném dokončení musí program vrátit hodnotu.
- Konec těla funkce main ().
emplace () a swap ()
Jedná se o další vestavěné funkce zásobníku:
- emplace () - konstrukce potom vloží nový prvek na začátek zásobníku.
- swap () - vymění obsah zásobníku za obsah jiného zásobníku.
Příklad 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();}}
Výstup:
Zde je snímek obrazovky s kódem:
Vysvětlení kódu:
- Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví iostream.
- Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví zásobníku.
- Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví cstdlib.
- Zahrňte do našeho kódu std namespace, abyste mohli používat jeho třídy, aniž byste jej volali.
- Zavolejte funkci main (). Logika programu bude přidána do těla této funkce.
- Deklarujte zásobník s názvem st1 pro ukládání celočíselných hodnot.
- Deklarujte zásobník s názvem st2 pro ukládání celočíselných hodnot.
- Pomocí funkce emplace () vložte celé číslo 12 do zásobníku s názvem st1.
- Pomocí funkce emplace () vložte celé číslo 19 do zásobníku s názvem st1.
- Pomocí funkce emplace () vložte celé číslo 20 do zásobníku s názvem st2.
- Pomocí funkce emplace () vložte celé číslo 23 do zásobníku s názvem st2.
- Pomocí funkce swap () můžete zaměnit obsah dvou zásobníků, st1 a st2. Obsah zásobníku st1 by měl být přesunut do zásobníku st2. Obsah zásobníku st2 by měl být přesunut do zásobníku st1.
- Vytiskněte nějaký text na konzoli.
- Pomocí příkazu while a funkce empty () zkontrolujte, zda zásobník st1 není prázdný.
- Vytiskněte obsah zásobníku st1 na konzolu. "" Přidává prostor mezi prvky zásobníku při jejich tisku na konzole.
- Spusťte funkci pop () na zásobníku st1 a odeberte horní prvek.
- Konec textu příkazu while.
- Vytiskněte nějaký text na konzoli. Endl je klíčové slovo C ++ pro koncový řádek. Přesune kurzor myši na další řádek a odtud začne tisknout.
- Pomocí příkazu while a funkce empty () zkontrolujte, zda zásobník st2 není prázdný.
- Vytiskněte obsah zásobníku st2 na konzoli. "" Přidává prostor mezi prvky zásobníku při jejich tisku na konzole.
- Spusťte funkci pop () na zásobníku st2 a odstraňte horní prvek.
- Konec textu příkazu while.
- Konec těla funkce main ().
Stack v STL
STL (Standard Template Library) přichází s třídami šablon, které poskytují běžné datové struktury C ++. Proto může být zásobník také implementován v STL. Tuto knihovnu jednoduše zahrneme do našeho kódu a použijeme ji k definování zásobníku.
stackst;
Výše uvedená syntaxe deklaruje zásobník st na prvky datového typu T.
Příklad 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();}
Výstup:
Zde je snímek obrazovky s kódem:
Vysvětlení kódu:
- Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví iostream.
- Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví zásobníku.
- Chcete-li používat jeho funkce, zahrňte do našeho kódu soubor záhlaví cstdlib.
- Zahrňte do našeho kódu std namespace, abyste mohli používat jeho třídy, aniž byste jej volali.
- Zavolejte funkci main (). Logika programu by měla být přidána do těla této funkce.
- Deklarujte zásobník st pro uložení celočíselných dat.
- Přidejte prvek 12 do zásobníku.
- Přidejte prvek 19 do zásobníku.
- Přidejte prvek 20 do zásobníku.
- Vytiskněte prvek v horní části stohu na konzole.
- Vytiskněte velikost stohu na konzole.
- Konec těla funkce main ().
Souhrn:
- Zásobník je datová struktura, která funguje na základě techniky LIFO (Last In First Out).
- Std :: stack umožňuje pouze přidávání a odebírání položek z jednoho konce.
- Třída std :: stack je adaptér kontejneru, který obsahuje položky podobného datového typu.
- Zásobník lze vytvořit z různých kontejnerů sekvence.
- Pokud nezadáte kontejner, ve výchozím nastavení se použije kontejner deque.
- Funkce push () slouží k vkládání položek do zásobníku.
- Funkce pop () slouží k odebrání horní položky z kroku.
- Funkce empty () slouží ke kontrole, zda je zásobník prázdný nebo ne.