Wat is std :: stack?
Een stack is een datastructuur die werkt op basis van de LIFO-techniek (Last In First Out). Met de std :: stack kunnen elementen worden toegevoegd en verwijderd vanaf één uiteinde.
De klasse std :: stack is een containeradapter. Containerobjecten bevatten gegevens van een vergelijkbaar gegevenstype. U kunt een stapel maken van verschillende volgordecontainers. Als er geen container wordt geleverd, wordt standaard de deque-container gebruikt. Containeradapters ondersteunen geen iterators, dus het kan niet worden gebruikt om gegevens te manipuleren.
In deze C ++ tutorial leer je
- Wat is std :: stack?
- Stack-syntaxis
- Soorten leden
- Bewerkingen in Stack
- Stack-implementatie
- push () en pop ()
- leeg (), maat (), boven ()
- emplace () en swap ()
- Stapelen in STL
Stack-syntaxis
Om een stapel te maken, moeten we het
template> class stack;
- Type - is het type element in de std :: stack. Het kan elk geldig C ++ -type zijn of zelfs een door de gebruiker gedefinieerd type.
- Container - is het type van het onderliggende containerobject.
Soorten leden
Hier zijn de typen stapelleden:
- value_type- De eerste sjabloonparameter, T. Het geeft de elementtypen aan.
- container_type- De tweede sjabloonparameter, Container. Het geeft het onderliggende containertype aan.
- size_type- Unsigned integraal type.
Bewerkingen in Stack
Een C ++ -stack ondersteunt de volgende basisbewerkingen:
- push - Het voegt een item toe / duwt in de stapel.
- pop - Het verwijdert / springt een item uit de stapel.
- peek - Geeft het bovenste item van de stapel terug zonder het te verwijderen.
- isFull - Controleert of een stapel vol is.
- isEmpty - Controleert of een stapel leeg is.
Stack-implementatie
Stap 1) We hebben in eerste instantie een lege stapel. De bovenkant van een lege stapel is ingesteld op -1.
Stap 2) Vervolgens hebben we het element 5 in de stapel geschoven. De bovenkant van de stapel wijst naar het element 5.
Stap 3) Vervolgens hebben we het element 50 in de stapel geschoven. De bovenkant van de stapel verschuift en wijst naar het element 50.
Stap 4) We hebben vervolgens een pop-operatie uitgevoerd, waarbij het bovenste element van de stapel is verwijderd. Het element 50 wordt uit de stapel gepoft. De bovenkant van de stapel wijst nu naar het element 5.
push () en pop ()
De functie stack :: push () voegt een nieuw item toe aan de bovenkant van de stapel. De stapelgrootte wordt vergroot met een 1 na het inbrengen. De functie heeft deze syntaxis:
stack.push(value)
De waarde is het item dat in de stapel moet worden ingevoegd.
De functie stack :: pop () verwijdert het bovenste element van de stapel. Dit is het nieuwste item van de stapel. De stapelgrootte wordt na het verwijderen met 1 verkleind. Hier is de syntaxis van de functie:
stack.pop()
De functie heeft geen parameters.
Voorbeeld 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();}}
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
- Neem het stack header-bestand op in onze code om de functies ervan te gebruiken.
- Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
- Roep de functie main () aan. De programmalogica moet binnen deze functie worden toegevoegd.
- Maak een stapel st om gehele getallen op te slaan.
- Gebruik de push () functie om de waarde 10 in de stapel in te voegen.
- Gebruik de push () functie om de waarde 20 in de stapel in te voegen.
- Gebruik de push () functie om de waarde 30 in de stapel in te voegen.
- Gebruik de push () functie om de waarde 40 in de stapel in te voegen.
- Gebruik de functie pop () om het bovenste element van de stapel te verwijderen, dat wil zeggen 40. Het bovenste element wordt nu 30.
- Gebruik de functie pop () om het bovenste element van de stapel te verwijderen, dat wil zeggen 30. Het bovenste element wordt nu 20.
- Gebruik een while-lus en de functie empty () om te controleren of de stapel NIET leeg is. De ! is de NOT-operator.
- De huidige inhoud van de stapel op de console afdrukken.
- Roep de functie pop () op de stapel aan.
- Einde van de body van de while-lus.
- Einde van de hoofdtekst () functie.
leeg (), maat (), boven ()
Stapels hebben ingebouwde functies die u kunt gebruiken om met de stapel en zijn waarden te spelen. Waaronder:
- empty () - controleert of een stapel leeg is of niet.
- size () - geeft de grootte van de stapel terug, dat wil zeggen het aantal elementen in een stapel.
- top () - geeft toegang tot het stapelelement bovenaan.
Voorbeeld 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;}
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
- Neem het stack header-bestand op in onze code om de functies ervan te gebruiken.
- Neem de std-naamruimte op in ons programma om zijn klassen te gebruiken zonder deze aan te roepen.
- Maak de functie createStack die we kunnen gebruiken om de stack mystack te maken. De stapel bevat een reeks gehele getallen.
- Het begin van de body van de createStack-functie.
- Maak een instantie van het datatype mystack en geef het de naam ms.
- Gebruik de while-lus en de functie empty () om te controleren of de stapel leeg is.
- Het begin van de body van de while-lus.
- Gebruik de functie top () die bovenaan de stapel is opgeslagen. Het teken \ t zal een nieuw tabblad creëren.
- Gebruik de functie pop () om het element bovenaan de stapel te verwijderen.
- Einde van de body van de while-lus.
- Druk een lege regel af op de console.
- Einde van de body van de createStack-functie.
- Roep de functie main () aan. De programmalogica moet worden toegevoegd in de hoofdtekst van de functie main ().
- Het begin van het hoofdgedeelte van de functie main ().
- Maak een stapelobject st.
- Gebruik de push () functie om het element 32 in de stapel te plaatsen.
- Gebruik de push () functie om het element 21 in de stapel te plaatsen.
- Gebruik de push () functie om het element 39 in de stapel te plaatsen.
- Gebruik de push () functie om het element 89 in de stapel te plaatsen.
- Gebruik de push () functie om het element 25 in de stapel te plaatsen.
- Druk wat tekst af op de console.
- Roep de functie createStack aan om de bovenstaande invoegbewerkingen in de stapel uit te voeren.
- Druk het formaat van de stapel op de console af naast andere tekst.
- Print het element bovenaan de stapel op de console.
- Druk wat tekst af op de console.
- Verwijder het element bovenaan de stapel. Het zal dan de elementen teruggeven die in de stapel zijn achtergebleven.
- Roep de createStack-functie aan om de bovenstaande bewerkingen uit te voeren.
- Het programma moet waarde teruggeven na succesvolle voltooiing.
- Einde van de hoofdtekst van de functie ().
emplace () en swap ()
Dit zijn andere ingebouwde stapelfuncties:
- emplace () - constructs voegt vervolgens een nieuw element toe aan de bovenkant van de stapel.
- swap () - wisselt de inhoud van een stapel uit met de inhoud van een andere stapel.
Voorbeeld 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();}}
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
- Neem het stack header-bestand op in onze code om de functies ervan te gebruiken.
- Neem het cstdlib-headerbestand op in onze code om de functies ervan te gebruiken.
- Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
- Roep de functie main () aan. De programmalogica wordt toegevoegd aan de body van deze functie.
- Declareer een stapel met de naam st1 om gehele getallen op te slaan.
- Declareer een stapel met de naam st2 om gehele getallen op te slaan.
- Gebruik de functie emplace () om het gehele getal 12 in te voegen in de stapel met de naam st1.
- Gebruik de functie emplace () om het gehele getal 19 in de stapel met de naam st1 in te voegen.
- Gebruik de functie emplace () om het gehele getal 20 in te voegen in de stapel met de naam st2.
- Gebruik de functie emplace () om het gehele getal 23 in de stapel met de naam st2 in te voegen.
- Gebruik de functie swap () om de inhoud van de twee stapels, st1 en st2, om te wisselen. De inhoud van de stapel st1 moet naar de stapel st2 worden verplaatst. De inhoud van de stapel st2 moet naar de stapel st1 worden verplaatst.
- Druk wat tekst af op de console.
- Gebruik de while-instructie en de empty () -functie om te controleren of de stack st1 niet leeg is.
- Druk de inhoud van de stapel st1 af op de console. De "" voegt ruimte toe tussen de stapelelementen bij het afdrukken op de console.
- Voer de functie pop () uit op de stapel st1 om het bovenste element te verwijderen.
- Einde van de body van de while-instructie.
- Druk wat tekst af op de console. De endl is een C ++ -zoekwoord voor de eindregel. Het verplaatst de muiscursor naar de volgende regel om vanaf daar te beginnen met afdrukken.
- Gebruik de while-instructie en de empty () -functie om te controleren of de stack st2 niet leeg is.
- Druk de inhoud van de stapel st2 af op de console. De "" voegt ruimte toe tussen de stapelelementen bij het afdrukken op de console.
- Voer de pop () functie uit op de stapel st2 om het bovenste element te verwijderen.
- Einde van de body van de while-instructie.
- Einde van de hoofdtekst van de functie main ().
Stapelen in STL
De STL (Standard Template Library) wordt geleverd met templateklassen die algemene C ++ - datastructuren bieden. Daarom kan een stack ook in STL worden geïmplementeerd. We nemen deze bibliotheek gewoon op in onze code en gebruiken deze om een stapel te definiëren.
stackst;
De bovenstaande syntaxis declareert een stapel st voor elementen van datatype T.
Voorbeeld 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();}
Uitgang:
Hier is een screenshot van de code:
Code Verklaring:
- Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
- Neem het stack header-bestand op in onze code om de functies ervan te gebruiken.
- Neem het cstdlib-headerbestand op in onze code om de functies ervan te gebruiken.
- Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
- Roep de functie main () aan. De programmalogica moet worden toegevoegd in de body van deze functie.
- Declareer een stack st om integer-gegevens op te slaan.
- Voeg het element 12 toe aan de stapel.
- Voeg het element 19 toe aan de stapel.
- Voeg het element 20 toe aan de stapel.
- Print het element bovenaan de stapel op de console.
- Druk het formaat van de stapel af op de console.
- Einde van de hoofdtekst van de functie main ().
Overzicht:
- Een stack is een datastructuur die werkt op basis van de LIFO-techniek (Last In first Out).
- Met de std :: stack kunnen alleen items aan één kant worden toegevoegd en verwijderd.
- De klasse std :: stack is een containeradapter die items van een vergelijkbaar gegevenstype bevat.
- Er kan een stapel worden gemaakt van verschillende volgordecontainers.
- Als u geen container opgeeft, wordt standaard de deque-container gebruikt.
- De functie push () is om items in de stapel te plaatsen.
- De functie pop () is om het bovenste item uit de trede te verwijderen.
- De functie empty () is om te controleren of een stapel leeg is of niet.