Čo je std :: stack?
Zásobník je dátová štruktúra, ktorá funguje na základe techniky LIFO (Last In First Out). Std :: stack umožňuje pridávanie a odstraňovanie prvkov iba na jednom konci.
Trieda std :: stack je kontajnerový adaptér. Kontajnerové objekty obsahujú údaje podobného dátového typu. Stoh môžete vytvoriť z rôznych kontajnerov sekvencií. Ak nie je uvedený žiadny kontajner, predvolene sa použije deque containe. Kontajnerové adaptéry nepodporujú iterátory, takže ho nemožno použiť na manipuláciu s údajmi.
V tomto výučbe pre C ++ sa naučíte
- Čo je std :: stack?
- Syntax zásobníka
- Typy členov
- Operácie v zásobníku
- Stack Implementácia
- push () a pop ()
- prázdne (), veľkosť (), horné ()
- emplace () a swap ()
- Sklad v STL
Syntax zásobníka
Aby sme vytvorili stoh, musíme do nášho kódu zahrnúť hlavičkový súbor
template> class stack;
- Typ - je typ prvku obsiahnutého v std :: stack. Môže to byť akýkoľvek platný typ C ++ alebo dokonca používateľom definovaný typ.
- Kontajner - je typ základného objektu kontajnera.
Typy členov
Tu sú typy členov zásobníka:
- value_type- prvý parameter šablóny, T. Označuje typy prvkov.
- container_type- Druhý parameter šablóny, Kontajner. Označuje podkladový typ kontajnera.
- size_type- nepodpísaný integrálny typ.
Operácie v zásobníku
Zásobník C ++ podporuje nasledujúce základné operácie:
- push - pridáva / tlačí položku do stohu.
- pop - Odstráni / vysunie položku zo zásobníka.
- peek - Vráti hornú položku zásobníka bez jej odstránenia.
- isFull - Skontroluje, či je zásobník plný.
- isEmpty - Skontroluje, či je zásobník prázdny.
Stack Implementácia
Krok 1) Spočiatku máme prázdny zásobník. Horná časť prázdneho stohu je nastavená na -1.
Krok 2) Ďalej sme prvok 5 natlačili do stohu. Horná časť stohu bude smerovať k prvku 5.
Krok 3) Ďalej sme prvok 50 vtlačili do stohu. Horná časť stohu sa posúva a ukazuje na prvok 50.
Krok 4) Potom sme vykonali popovú operáciu odstránením horného prvku zo zásobníka. Element 50 je vysunutý zo stohu. Horná časť stohu teraz smeruje k prvku 5.
push () a pop ()
Funkcie stack :: push () pridávajú novú položku do hornej časti zásobníka. Po vložení sa veľkosť stohu zvýši o 1. Funkcia má túto syntax:
stack.push(value)
Hodnota je položka, ktorá sa má vložiť do stohu.
Funkcia stack :: pop () odstráni horný prvok zásobníka. Toto je najnovšia položka v zásobníku. Po odstránení sa veľkosť stohu zmenší o 1. Tu je syntax funkcie:
stack.pop()
Funkcia nemá žiadne parametre.
Prí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ýkon:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Zahrňte súbor hlavičky iostream do nášho kódu, aby ste mohli využívať jeho funkcie.
- Zahrňte súbor hlavičky zásobníka do nášho kódu, aby ste mohli využívať jeho funkcie.
- Ak chcete používať svoje triedy bez toho, aby ste ich volali, zahrňte do nášho kódu std namespace.
- Zavolajte funkciu main (). Do tejto funkcie by sa mala pridať programová logika.
- Vytvorte stoh zásobníka na ukladanie celočíselných hodnôt.
- Pomocou funkcie push () vložte hodnotu 10 do stohu.
- Pomocou funkcie push () vložte hodnotu 20 do stohu.
- Pomocou funkcie push () vložte hodnotu 30 do stohu.
- Pomocou funkcie push () vložte hodnotu 40 do zásobníka.
- Pomocou funkcie pop () odstráňte horný prvok zo zásobníka, to znamená 40. Z horného prvku sa teraz stáva 30.
- Pomocou funkcie pop () odstráňte horný prvok zo zásobníka, to znamená 30. Z horného prvku sa teraz stáva 20.
- Pomocou funkcie while a empty () skontrolujte, či zásobník NIE je prázdny. The! nie je operátorom.
- Tlač aktuálneho obsahu stohu na konzole.
- Zavolajte funkciu pop () na zásobníku.
- Koniec tela slučky while.
- Koniec hlavného () funkčného tela.
prázdne (), veľkosť (), horné ()
Stohy majú zabudované funkcie, ktoré môžete použiť na hranie sa so zásobníkom a jeho hodnotami. Tie obsahujú:
- empty () - skontroluje, či je zásobník prázdny alebo nie.
- size () - vráti veľkosť stohu, to znamená počet prvkov v stohu.
- top () - prístup k prvku zásobníka v hornej časti.
Prí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ýkon:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Zahrňte hlavičkový súbor iostream do nášho kódu, aby ste mohli využívať jeho funkcie.
- Zahrňte súbor hlavičky zásobníka do nášho kódu, aby ste mohli využívať jeho funkcie.
- Zahrňte štandardný priestor mien do nášho programu, aby ste mohli používať jeho triedy bez jeho volania.
- Vytvorte funkciu createStack, ktorú môžeme použiť na vytvorenie zásobníka mystack. Na hromádke sa bude nachádzať množina celých čísel.
- Začiatok tela funkcie createStack.
- Vytvorte inštanciu dátového typu mystack a pomenujte ju ms.
- Pomocou slučky while a funkcie empty () skontrolujte, či je zásobník prázdny.
- Začiatok tela slučky while.
- Použite funkciu top () uloženú v hornej časti stohu. Znak \ t vytvorí novú kartu.
- Pomocou funkcie pop () odstráňte prvok v hornej časti zásobníka.
- Koniec tela slučky while.
- Na konzole vytlačte prázdny riadok.
- Koniec tela funkcie createStack.
- Zavolajte funkciu main (). Logika programu by mala byť pridaná do tela funkcie main ().
- Začiatok tela funkcie main ().
- Vytvorte stohový objekt sv.
- Pomocou funkcie push () vložte prvok 32 do stohu.
- Pomocou funkcie push () vložte prvok 21 do stohu.
- Pomocou funkcie push () vložte prvok 39 do stohu.
- Pomocou funkcie push () vložte prvok 89 do stohu.
- Pomocou funkcie push () vložte prvok 25 do stohu.
- Vytlačte nejaký text na konzolu.
- Zavolajte funkciu createStack na vykonanie vyššie uvedených operácií vloženia do zásobníka.
- Vytlačte veľkosť stohu na konzole spolu s ďalším textom.
- Vytlačte prvok v hornej časti stohu na konzole.
- Vytlačte nejaký text na konzolu.
- Odstráňte prvok v hornej časti stohu. Potom vráti prvky zostávajúce v zásobníku.
- Na vykonanie vyššie uvedených operácií zavolajte funkciu createStack.
- Po úspešnom dokončení musí program vrátiť hodnotu.
- Koniec tela funkcie main ().
emplace () a swap ()
Toto sú ďalšie zabudované funkcie zásobníka:
- emplace () - konštrukty potom vložia nový prvok do hornej časti zásobníka.
- swap () - vymení obsah zásobníka za obsah iného zásobníka.
Prí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ýkon:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Zahrňte súbor hlavičky iostream do nášho kódu, aby ste mohli využívať jeho funkcie.
- Zahrňte súbor hlavičky zásobníka do nášho kódu, aby ste mohli využívať jeho funkcie.
- Zahrňte súbor hlavičky cstdlib do nášho kódu, aby ste mohli využívať jeho funkcie.
- Ak chcete používať svoje triedy bez toho, aby ste ich volali, zahrňte do nášho kódu std namespace.
- Zavolajte funkciu main (). Logika programu bude pridaná do tela tejto funkcie.
- Deklarujte zásobník s názvom st1 na ukladanie celočíselných hodnôt.
- Deklarujte zásobník s názvom st2 na ukladanie celočíselných hodnôt.
- Pomocou funkcie emplace () vložte celé číslo 12 do zásobníka s názvom st1.
- Pomocou funkcie emplace () vložte celé číslo 19 do zásobníka s názvom st1.
- Pomocou funkcie emplace () vložte celé číslo 20 do zásobníka s názvom st2.
- Pomocou funkcie emplace () vložte celé číslo 23 do zásobníka s názvom st2.
- Pomocou funkcie swap () môžete zameniť obsah dvoch stohov, st1 a st2. Obsah stohu st1 by sa mal presunúť do stohu st2. Obsah stohu st2 by sa mal presunúť do stohu st1.
- Vytlačte nejaký text na konzolu.
- Pomocou príkazu while a funkcie empty () skontrolujte, či zásobník st1 nie je prázdny.
- Vytlačte obsah stohu st1 na konzolu. Symbol „“ pridáva priestor medzi prvkami stohu pri ich tlači na konzole.
- Vykonajte funkciu pop () na zásobníku st1, aby ste odstránili horný prvok.
- Koniec textu vyhlásenia while.
- Vytlačte nejaký text na konzolu. Endl je kľúčové slovo C ++ pre koncový riadok. Presunie kurzor myši na ďalší riadok a odtiaľ začne tlačiť.
- Pomocou príkazu while a funkcie empty () skontrolujte, či zásobník st2 nie je prázdny.
- Vytlačte obsah stohu st2 na konzolu. Symbol „“ pridáva priestor medzi prvkami stohu pri ich tlači na konzole.
- Vykonajte funkciu pop () na zásobníku st2, aby ste odstránili horný prvok.
- Koniec textu vyhlásenia while.
- Koniec tela hlavnej () funkcie.
Sklad v STL
STL (Standard Template Library) je dodávaný s triedami šablón, ktoré poskytujú bežné dátové štruktúry C ++. Preto môže byť zásobník implementovaný aj v STL. Túto knižnicu jednoducho zahrnieme do nášho kódu a použijeme ju na definovanie zásobníka.
stackst;
Vyššie uvedená syntax deklaruje zásobník st na prvky dátového typu T.
Prí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ýkon:
Tu je snímka obrazovky s kódom:
Vysvetlenie kódu:
- Zahrňte súbor hlavičky iostream do nášho kódu, aby ste mohli využívať jeho funkcie.
- Zahrňte súbor hlavičky zásobníka do nášho kódu, aby ste mohli využívať jeho funkcie.
- Zahrňte súbor hlavičky cstdlib do nášho kódu, aby ste mohli využívať jeho funkcie.
- Ak chcete používať svoje triedy bez toho, aby ste ich volali, zahrňte do nášho kódu std namespace.
- Zavolajte funkciu main (). Logika programu by mala byť pridaná do tela tejto funkcie.
- Deklarujte zásobník st na ukladanie celočíselných údajov.
- Pridajte prvok 12 do stohu.
- Pridajte prvok 19 do stohu.
- Pridajte prvok 20 do stohu.
- Vytlačte prvok v hornej časti stohu na konzole.
- Vytlačte veľkosť stohu na konzole.
- Koniec tela funkcie main ().
Zhrnutie:
- Zásobník je dátová štruktúra, ktorá funguje na základe techniky LIFO (Last In First Out).
- Std :: stack umožňuje pridávanie a odoberanie položiek iba na jednom konci.
- Trieda std :: stack je kontajnerový adaptér, ktorý obsahuje položky podobného dátového typu.
- Stoh je možné vytvoriť z rôznych kontajnerov sekvencií.
- Ak neposkytnete kontajner, predvolene sa použije kontajner deque.
- Funkcia push () slúži na vkladanie položiek do stohu.
- Funkcia pop () slúži na odstránenie hornej položky z kroku.
- Funkcia empty () slúži na kontrolu, či je zásobník prázdny alebo nie.