Slagati u C++ STL s primjerom

ล to je std::stack?

Stog je struktura podataka koja funkcionira na temelju tehnike LIFO (Last In First Out). Std::stack omoguฤ‡uje dodavanje i uklanjanje elemenata samo s jednog kraja.

Klasa std::stack je adapter spremnika. Objekti spremnika sadrลพe podatke sliฤnog tipa podataka. Moลพete stvoriti hrpu iz razliฤitih spremnika niza. Ako nije naveden spremnik, prema zadanim postavkama koristit ฤ‡e se deque containe. Adapteri spremnika ne podrลพavaju iteratore, pa se ne mogu koristiti za manipuliranje podacima.

Sintaksa hrpe

Da bismo stvorili stog, moramo ukljuฤiti datoteku zaglavlja u naลกem kodu. Zatim koristimo ovu sintaksu da definiramo std::stack:

template <class Type, class Container = deque<Type> > class stack;
  • Tip โ€“ je tip elementa sadrลพanog u std::stack. Moลพe biti bilo koji valjan C++ tipa ili ฤak korisniฤki definiranog tipa.
  • Kontejner โ€“ je Vrsta temeljnog objekta spremnika.

Vrste ฤlanova

Evo tipova ฤlanova stoga:

  • value_type- Prvi parametar predloลกka, โ€‹โ€‹T. Oznaฤava tipove elemenata.
  • container_type- Drugi parametar predloลกka, โ€‹โ€‹Container. Oznaฤava temeljni tip spremnika.
  • size_type- Nepredpisani integralni tip.

Operacije u Stacku

A C++ stog podrลพava sljedeฤ‡e osnovne operacije:

  • push โ€“ Dodaje/gura stavku u stog.
  • pop โ€“ Uklanja/iskaฤe stavku sa hrpe.
  • peek โ€“ Vraฤ‡a gornju stavku snopa bez uklanjanja.
  • isFull โ€“ Provjerava je li stog pun.
  • isEmpty โ€“ Provjerava je li stog prazan.

Implementacija stoga

Implementacija stoga

Korak 1) U poฤetku imamo prazan stog. Vrh praznog stoga postavljen je na -1.

Korak 2) Zatim smo gurnuli element 5 u stog. Vrh hrpe pokazat ฤ‡e na element 5.

Korak 3) Zatim smo gurnuli element 50 u stog. Vrh hrpe se pomiฤe i pokazuje na element 50.

Korak 4) Zatim smo izveli operaciju iskakanja, uklanjajuฤ‡i gornji element iz hrpe. Element 50 je izvuฤen iz hrpe. Vrh hrpe sada pokazuje na element 5.

push() i pop()

Funkcija stack::push() dodaje novu stavku na vrh stoga. Veliฤina hrpe se poveฤ‡ava za 1 nakon umetanja. Funkcija ima ovu sintaksu:

stack.push(value)

Vrijednost je stavka koju treba umetnuti u stog.

Funkcija stack:: pop() uklanja gornji element snopa. Ovo je najnovija stavka na hrpi. Veliฤina hrpe se smanjuje za 1 nakon uklanjanja. Evo sintakse funkcije:

stack.pop()

Funkcija ne uzima parametre.

Primjer 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();
	}
}

Izlaz:

push() i pop()

Evo snimke zaslona koda:

push() i pop()

Code Objaลกnjenje:

  1. Ukljuฤite iostream datoteku zaglavlja u naลก kod da biste koristili njezine funkcije.
  2. Ukljuฤite datoteku zaglavlja hrpe u naลก kod da biste koristili njezine funkcije.
  3. Ukljuฤite prostor imena std u naลก kod da biste koristili njegove klase bez pozivanja.
  4. Pozovite funkciju main(). Programsku logiku treba dodati unutar ove funkcije.
  5. Stvorite stog st za pohranu cjelobrojnih vrijednosti.
  6. Koristite funkciju push() za umetanje vrijednosti 10 u stog.
  7. Koristite funkciju push() za umetanje vrijednosti 20 u stog.
  8. Koristite funkciju push() za umetanje vrijednosti 30 u stog.
  9. Koristite funkciju push() za umetanje vrijednosti 40 u stog.
  10. Upotrijebite funkciju pop() za uklanjanje gornjeg elementa iz niza, to jest 40. Gornji element sada postaje 30.
  11. Upotrijebite funkciju pop() za uklanjanje gornjeg elementa iz niza, to jest 30. Gornji element sada postaje 20.
  12. Upotrijebite petlju while i funkciju empty() da provjerite da li stog NIJE prazan. The ! je operator NOT.
  13. Ispis trenutnog sadrลพaja steka na konzoli.
  14. Pozovite funkciju pop() na stogu.
  15. Kraj tijela while petlje.
  16. Kraj tijela funkcije main().

prazno(), veliฤina(), vrh()

Skupovi imaju ugraฤ‘ene funkcije koje moลพete koristiti za igranje s nizom i njegovim vrijednostima. To ukljuฤuje:

  • empty()- provjerava da li je stog prazan ili ne.
  • size()- vraฤ‡a veliฤinu steka, odnosno broj elemenata u stogu.
  • top()- pristupa elementu hrpe na vrhu.

Primjer 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;
}

Izlaz:

prazno(),veliฤina(),top()

Evo snimke zaslona koda:

prazno(),veliฤina(),top()

Code Objaลกnjenje:

  1. Ukljuฤite iostream datoteku zaglavlja u naลก kod kako biste koristili njezine funkcije.
  2. Ukljuฤite datoteku zaglavlja hrpe u naลก kod kako biste koristili njezine funkcije.
  3. Ukljuฤite prostor imena std u naลก program kako biste koristili njegove klase bez pozivanja.
  4. Napravite funkciju createStack koju moลพemo koristiti za stvaranje stoga mystack. Stog ฤ‡e sadrลพavati skup cijelih brojeva.
  5. Poฤetak tijela funkcije createStack.
  6. Stvorite instancu vrste podataka mystack i dajte joj ime ms.
  7. Koristite while petlju i funkciju empty() da provjerite je li stog prazan.
  8. Poฤetak tijela while petlje.
  9. Koristite funkciju top() pohranjenu na vrhu stoga. Znak \t stvorit ฤ‡e novu karticu.
  10. Upotrijebite funkciju pop() za brisanje elementa na vrhu niza.
  11. Kraj tijela while petlje.
  12. Ispiลกite prazan redak na konzoli.
  13. Kraj tijela funkcije createStack.
  14. Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela funkcije main().
  15. Poฤetak tijela funkcije main().
  16. Stvorite stack objekt st.
  17. Koristite funkciju push() za umetanje elementa 32 u stog.
  18. Koristite funkciju push() za umetanje elementa 21 u stog.
  19. Koristite funkciju push() za umetanje elementa 39 u stog.
  20. Koristite funkciju push() za umetanje elementa 89 u stog.
  21. Koristite funkciju push() za umetanje elementa 25 u stog.
  22. Ispiลกite tekst na konzoli.
  23. Pozovite funkciju createStack da biste izvrลกili gornje operacije umetanja u stog.
  24. Ispiลกite veliฤinu hrpe na konzoli uz ostali tekst.
  25. Ispiลกite element na vrhu hrpe na konzoli.
  26. Ispiลกite tekst na konzoli.
  27. Izbriลกite element na vrhu hrpe. Zatim ฤ‡e vratiti elemente koji su ostali u stogu.
  28. Pozovite funkciju createStack da biste izvrลกili gore navedene operacije.
  29. Program mora vratiti vrijednost nakon uspjeลกnog zavrลกetka.
  30. Kraj tijela funkcije main().

emplace() i swap()

Ovo su druge ugraฤ‘ene funkcije snopa:

  • emplace() - konstruira zatim umeฤ‡e novi element na vrh hrpe.
  • swap() - razmjenjuje sadrลพaj steka sa sadrลพajem drugog steka.

Primjer 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();
	}
}

Izlaz:

emplace()& swap()

Evo snimke zaslona koda:

emplace()& swap()

Code Objaลกnjenje:

  1. Ukljuฤite iostream datoteku zaglavlja u naลก kod da biste koristili njezine funkcije.
  2. Ukljuฤite datoteku zaglavlja hrpe u naลก kod da biste koristili njezine funkcije.
  3. Ukljuฤite cstdlib datoteku zaglavlja u naลก kod da biste koristili njezine funkcije.
  4. Ukljuฤite prostor imena std u naลก kod da biste koristili njegove klase bez pozivanja.
  5. Pozovite funkciju main(). Programska logika bit ฤ‡e dodana unutar tijela ove funkcije.
  6. Deklarirajte stog pod nazivom st1 za pohranu cjelobrojnih vrijednosti.
  7. Deklarirajte stog pod nazivom st2 za pohranu cjelobrojnih vrijednosti.
  8. Upotrijebite funkciju emplace() za umetanje cijelog broja 12 u stog pod nazivom st1.
  9. Upotrijebite funkciju emplace() za umetanje cijelog broja 19 u stog pod nazivom st1.
  10. Upotrijebite funkciju emplace() za umetanje cijelog broja 20 u stog pod nazivom st2.
  11. Upotrijebite funkciju emplace() za umetanje cijelog broja 23 u stog pod nazivom st2.
  12. Upotrijebite funkciju swap() za izmjenu sadrลพaja dvaju hrpa, st1 i st2. Sadrลพaj snopa st1 treba premjestiti na snop st2. Sadrลพaj snopa st2 treba premjestiti na snop st1.
  13. Ispiลกite tekst na konzoli.
  14. Upotrijebite naredbu while i funkciju empty() da provjerite je li stog st1 prazan.
  15. Ispiลกite sadrลพaj steka st1 na konzoli. โ€ โ€ dodaje razmak izmeฤ‘u elemenata hrpe kada ih ispisuje na konzoli.
  16. Izvrลกite funkciju pop() na stogu st1 da biste uklonili gornji element.
  17. Kraj tijela naredbe while.
  18. Ispiลกite tekst na konzoli. Kraj je a C++ kljuฤna rijeฤ za zavrลกni redak. Pomiฤe kursor miลกa u sljedeฤ‡i redak kako bi od tamo zapoฤeo ispis.
  19. Upotrijebite naredbu while i funkciju empty() da provjerite je li stog st2 prazan.
  20. Ispiลกite sadrลพaj steka st2 na konzoli. โ€ โ€ dodaje razmak izmeฤ‘u elemenata hrpe kada ih ispisuje na konzoli.
  21. Izvrลกite funkciju pop() na stogu st2 da biste uklonili gornji element.
  22. Kraj tijela naredbe while.
  23. Kraj tijela funkcije main().

Stog u STL-u

STL (Standardna biblioteka predloลพaka) dolazi s klasama predloลพaka koje pruลพaju zajedniฤke C++ strukture podataka. Stoga se stog takoฤ‘er moลพe implementirati u STL-u. Jednostavno ukljuฤimo ovu biblioteku u naลก kod i koristimo je za definiranje stoga.

stack<T> st; 

Gornja sintaksa deklarira stog prema elementima tipa podataka T.

Primjer 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();  
}

Izlaz:

Stog u STL-u

Evo snimke zaslona koda:

Stog u STL-u

Code Objaลกnjenje:

  1. Ukljuฤite iostream datoteku zaglavlja u naลก kod da biste koristili njezine funkcije.
  2. Ukljuฤite datoteku zaglavlja hrpe u naลก kod da biste koristili njezine funkcije.
  3. Ukljuฤite cstdlib datoteku zaglavlja u naลก kod da biste koristili njezine funkcije.
  4. Ukljuฤite prostor imena std u naลก kod da biste koristili njegove klase bez pozivanja.
  5. Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela ove funkcije.
  6. Deklarirajte stack st za pohranjivanje cjelobrojnih podataka.
  7. Dodajte element 12 u hrpu.
  8. Dodajte element 19 u hrpu.
  9. Dodajte element 20 u hrpu.
  10. Ispiลกite element na vrhu hrpe na konzoli.
  11. Ispiลกite veliฤinu hrpe na konzoli.
  12. Kraj tijela funkcije main().

Rezime

  • Stog je struktura podataka koja funkcionira na temelju tehnike LIFO (Last In First Out).
  • Std::stack dopuลกta samo dodavanje i uklanjanje stavki s jednog kraja.
  • Klasa std::stack je adapter spremnika koji sadrลพi stavke sliฤnog tipa podataka.
  • Stog se moลพe stvoriti iz razliฤitih spremnika niza.
  • Ako ne navedete spremnik, prema zadanim ฤ‡e se postavkama koristiti deque spremnik.
  • Funkcija push() sluลพi za umetanje stavki u hrpu.
  • Funkcija pop() sluลพi za uklanjanje gornje stavke iz koraka.
  • Funkcija empty() sluลพi za provjeru je li stog prazan ili ne.

Saลพmite ovu objavu uz: