Pinoa sisään C++ STL esimerkin kanssa

Mikä on std::stack?

Pino on tietorakenne, joka toimii LIFO-tekniikan (Last In First Out) perusteella. Std::stack sallii elementtien lisäämisen ja poistamisen vain toisesta päästä.

Std::stack-luokka on konttisovitin. Säilöobjektit sisältävät samantyyppisiä tietoja. Voit luoda pinon useista sarjasäiliöistä. Jos konttia ei toimiteta, deque-sisäilystä käytetään oletuksena. Säilösovittimet eivät tue iteraattoreita, joten niitä ei voi käyttää tietojen käsittelyyn.

Pinon syntaksi

Pinon luomiseksi meidän on sisällytettävä otsikkotiedosto koodissamme. Käytämme sitten tätä syntaksia määrittämään std::stack:

template <class Type, class Container = deque<Type> > class stack;
  • Tyyppi – on std::pinon sisältämän elementin tyyppi. Se voi olla mikä tahansa kelvollinen C++ tyyppi tai jopa käyttäjän määrittämä tyyppi.
  • Kontti – on taustalla olevan säiliöobjektin tyyppi.

Jäsentyypit

Tässä on pinon jäsentyypit:

  • value_type- Ensimmäinen malliparametri, T. Se ilmaisee elementtityyppejä.
  • container_type- Toinen mallin parametri, Container. Se ilmaisee taustalla olevan säiliötyypin.
  • size_type- Signed integraalityyppi.

OperaStackissa

A C++ pino tukee seuraavia perustoimintoja:

  • push – Se lisää/työntää kohteen pinoon.
  • pop – Se poistaa/poistaa kohteen pinosta.
  • peek – Palauttaa pinon ylimmän kohteen poistamatta sitä.
  • isFull – Tarkistaa, onko pino täynnä.
  • isEmpty – Tarkistaa, onko pino tyhjä.

Pinon toteutus

Pinon toteutus

Vaihe 1) Meillä on aluksi tyhjä pino. Tyhjän pinon yläreunaksi on asetettu -1.

Vaihe 2) Seuraavaksi olemme työntäneet elementin 5 pinoon. Pinon yläosa osoittaa elementtiin 5.

Vaihe 3) Seuraavaksi olemme työntäneet elementin 50 pinoon. Pinon yläosa siirtyy ja osoittaa elementtiin 50.

Vaihe 4) Olemme sitten suorittaneet pop-operaation poistamalla ylimmän elementin pinosta. Elementti 50 pompataan pinosta. Pinon yläreuna osoittaa nyt elementtiin 5.

push() ja pop()

Pino::push()-funktiot lisäävät uuden kohteen pinon alkuun. Pinon kokoa kasvatetaan yhdellä lisäämisen jälkeen. Funktio ottaa tämän syntaksin:

stack.push(value)

Arvo on pinoon lisättävä kohde.

Pino:: pop()-funktio poistaa pinon ylimmän elementin. Tämä on pinon uusin kohde. Pinon kokoa pienennetään 1:llä poistamisen jälkeen. Tässä on funktion syntaksi:

stack.pop()

Toiminto ei ota parametreja.

Esimerkki 1:

#include <iostream> 
#include <stack> 
using namespace std;
int main() {
	stack<int> 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();
	}
}

lähtö:

push() ja pop()

Tässä on kuvakaappaus koodista:

push() ja pop()

Koodin selitys:

  1. Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
  2. Sisällytä pinon otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
  3. Sisällytä std-nimiavaruus koodiimme käyttääksesi sen luokkia kutsumatta sitä.
  4. Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä tähän toimintoon.
  5. Luo pino st kokonaislukuarvojen tallentamiseksi.
  6. Käytä push()-funktiota lisätäksesi arvon 10 pinoon.
  7. Käytä push()-funktiota lisätäksesi arvon 20 pinoon.
  8. Käytä push()-funktiota lisätäksesi arvon 30 pinoon.
  9. Käytä push()-funktiota lisätäksesi arvon 40 pinoon.
  10. Käytä pop()-funktiota poistaaksesi pinosta ylimmän elementin, eli 40. Yläelementistä tulee nyt 30.
  11. Käytä pop()-funktiota poistaaksesi pinosta ylimmän elementin, eli 30. Yläelementistä tulee nyt 20.
  12. Käytä while-silmukkaa ja tyhjä()-funktiota tarkistaaksesi, onko pino EI tyhjä. ! on EI-operaattori.
  13. Pinon nykyisen sisällön tulostaminen konsoliin.
  14. Kutsu pinon pop()-funktiota.
  15. While-silmukan rungon loppu.
  16. Main()-funktion rungon loppu.

tyhjä(), koko(), top()

Pinoissa on sisäänrakennettuja toimintoja, joiden avulla voit leikkiä pinolla ja sen arvoilla. Nämä sisältävät:

  • tyhjä()- tarkistaa, onko pino tyhjä vai ei.
  • size()- palauttaa pinon koon, eli pinon elementtien lukumäärän.
  • top()- käyttää pinoelementtiä yläosassa.

Esimerkki 2:

#include <iostream> 
#include <stack>  
using namespace std;
void createStack(stack <int> mystack)
{
	stack <int> ms = mystack;
	while (!ms.empty())
	{
		cout << '\t' << ms.top();
		ms.pop();
	}
	cout << '\n';
}
int main()
{
	stack <int> 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;
}

lähtö:

tyhjä(),koko(),top()

Tässä on kuvakaappaus koodista:

tyhjä(),koko(),top()

Koodin selitys:

  1. Sisällytä iostream-otsikkotiedosto koodiimme, jotta voit käyttää sen toimintoja.
  2. Sisällytä pinon otsikkotiedosto koodiimme, jotta voit käyttää sen toimintoja.
  3. Sisällytä std-nimiavaruus ohjelmaamme, jotta voit käyttää sen luokkia kutsumatta sitä.
  4. Luo funktio createStack, jota voimme käyttää pinon mystackin luomiseen. Pino sisältää joukon kokonaislukuja.
  5. CreateStack-funktion rungon alku.
  6. Luo mystack-tietotyypin esiintymä ja anna sille nimi ms.
  7. Käytä while-silmukkaa ja tyhjä()-funktiota tarkistaaksesi, onko pino tyhjä.
  8. While-silmukan rungon alku.
  9. Käytä pinon yläosaan tallennettua top()-funktiota. \t-merkki luo uuden välilehden.
  10. Käytä pop()-funktiota poistaaksesi elementin pinon yläosassa.
  11. While-silmukan rungon loppu.
  12. Tulosta tyhjä rivi konsoliin.
  13. CreateStack-funktion rungon loppu.
  14. Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä main()-funktion runkoon.
  15. Toiminnon main() rungon alku.
  16. Luo pinoobjekti st.
  17. Käytä push()-funktiota lisätäksesi elementin 32 pinoon.
  18. Käytä push()-funktiota lisätäksesi elementin 21 pinoon.
  19. Käytä push()-funktiota lisätäksesi elementin 39 pinoon.
  20. Käytä push()-funktiota lisätäksesi elementin 89 pinoon.
  21. Käytä push()-funktiota lisätäksesi elementin 25 pinoon.
  22. Tulosta tekstiä konsoliin.
  23. Kutsu CreateStack-toiminto suorittaaksesi yllä olevat lisäystoiminnot pinoon.
  24. Tulosta pinon koko konsoliin muun tekstin viereen.
  25. Tulosta elementti konsolin pinon yläosassa.
  26. Tulosta tekstiä konsoliin.
  27. Poista pinon yläosassa oleva elementti. Sitten se palauttaa pinossa jäljellä olevat elementit.
  28. Suorita yllä olevat toiminnot kutsumalla createStack-funktiota.
  29. Ohjelman on palautettava arvo, kun se on suoritettu onnistuneesti.
  30. Funktion main() rungon loppu.

emplace() ja swap()

Nämä ovat muita sisäänrakennettuja pinotoimintoja:

  • emplace()- rakentaa ja lisää sitten uuden elementin pinon alkuun.
  • swap()- vaihtaa pinon sisällön toisen pinon sisältöön.

Esimerkki 3:

#include <iostream>    
#include <stack>
#include <cstdlib>
using namespace std;
int main() {
	stack<int> st1;
	stack<int> 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();
	}
}

lähtö:

emplace()& swap()

Tässä on kuvakaappaus koodista:

emplace()& swap()

Koodin selitys:

  1. Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
  2. Sisällytä pinon otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
  3. Sisällytä cstdlib-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
  4. Sisällytä std-nimiavaruus koodiimme käyttääksesi sen luokkia kutsumatta sitä.
  5. Kutsu main()-funktiota. Ohjelmalogiikka lisätään tämän funktion runkoon.
  6. Määritä pino nimeltä st1 tallentaaksesi kokonaislukuarvot.
  7. Määritä pino nimeltä st2 tallentaaksesi kokonaislukuarvot.
  8. Käytä emplace()-funktiota lisätäksesi kokonaisluvun 12 pinoon nimeltä st1.
  9. Käytä emplace()-funktiota lisätäksesi kokonaisluvun 19 pinoon nimeltä st1.
  10. Käytä emplace()-funktiota lisätäksesi kokonaisluvun 20 pinoon nimeltä st2.
  11. Käytä emplace()-funktiota lisätäksesi kokonaisluvun 23 pinoon nimeltä st2.
  12. Käytä swap()-funktiota vaihtaaksesi kahden pinon, st1 ja st2, sisältöä. Pinon st1 sisältö tulee siirtää pinoon st2. Pinon st2 sisältö tulee siirtää pinoon st1.
  13. Tulosta tekstiä konsoliin.
  14. Käytä while-lausetta ja tyhjä()-funktiota tarkistaaksesi, onko pino st1 tyhjä.
  15. Tulosta pinon st1 sisältö konsoliin. ” ” lisää tilaa pinoelementtien väliin tulostettaessa niitä konsoliin.
  16. Suorita pop()-funktio pinossa st1 poistaaksesi ylimmän elementin.
  17. While-lauseen rungon loppu.
  18. Tulosta tekstiä konsoliin. Loppu on a C++ avainsana loppuriville. Se siirtää hiiren osoittimen seuraavalle riville tulostamisen aloittamiseksi sieltä.
  19. Käytä while-lausetta ja tyhjä()-funktiota tarkistaaksesi, onko pino st2 tyhjä.
  20. Tulosta pinon st2 sisältö konsoliin. ” ” lisää tilaa pinoelementtien väliin tulostettaessa niitä konsoliin.
  21. Suorita pop()-funktio pinossa st2 poistaaksesi ylimmän elementin.
  22. While-lauseen rungon loppu.
  23. Main()-funktion rungon loppu.

Pinoa STL:ssä

STL (Standard Template Library) sisältää malliluokkia, jotka tarjoavat yhteisiä C++ tietorakenteita. Siksi pino voidaan toteuttaa myös STL:ssä. Sisällytämme tämän kirjaston vain koodiimme ja käytämme sitä pinon määrittämiseen.

stack<T> st; 

Yllä oleva syntaksi ilmoittaa pinon st tietotyypin T elementeille.

Esimerkki 4:

#include <iostream>      
#include <stack>
#include <cstdlib>
using namespace std;
int main() {
	stack<int> st;
	st.push(12);
	st.push(19);
	st.push(20);
	cout << st.top();   
	cout << st.size();  
}

lähtö:

Pinoa STL:ssä

Tässä on kuvakaappaus koodista:

Pinoa STL:ssä

Koodin selitys:

  1. Sisällytä iostream-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
  2. Sisällytä pinon otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
  3. Sisällytä cstdlib-otsikkotiedosto koodiimme käyttääksesi sen toimintoja.
  4. Sisällytä std-nimiavaruus koodiimme käyttääksesi sen luokkia kutsumatta sitä.
  5. Kutsu main()-funktiota. Ohjelmalogiikka tulisi lisätä tämän funktion runkoon.
  6. Määritä pino st kokonaislukutietojen tallentamiseksi.
  7. Lisää elementti 12 pinoon.
  8. Lisää elementti 19 pinoon.
  9. Lisää elementti 20 pinoon.
  10. Tulosta elementti konsolin pinon yläosassa.
  11. Tulosta pinon koko konsoliin.
  12. Funktion main() rungon loppu.

Yhteenveto

  • Pino on tietorakenne, joka toimii LIFO-tekniikan (Last In first Out) perusteella.
  • Std::pino sallii kohteiden lisäämisen ja poistamisen vain toisesta päästä.
  • Std::pinoluokka on konttisovitin, joka sisältää samantyyppisiä kohteita.
  • Pino voidaan luoda erilaisista sekvenssisäiliöistä.
  • Jos et anna säilöä, tyhjennyssäiliötä käytetään oletuksena.
  • Push()-funktio on tarkoitettu kohteiden lisäämiseen pinoon.
  • Pop()-funktio on tarkoitettu ylimmän kohteen poistamiseen vaiheesta.
  • Tyhjä()-funktio on tarkoitettu tarkistamaan, onko pino tyhjä vai ei.