Stapeln Sie ein C++ STL mit Beispiel

Was ist std::stack?

Ein Stapel ist eine Datenstruktur, die auf der LIFO-Technik (Last In First Out) basiert. Der std::stack ermรถglicht das Hinzufรผgen und Entfernen von Elementen nur von einem Ende aus.

Die Klasse std::stack ist ein Containeradapter. Containerobjekte enthalten Daten eines รคhnlichen Datentyps. Sie kรถnnen einen Stapel aus verschiedenen Sequenzcontainern erstellen. Wenn kein Container bereitgestellt wird, wird standardmรครŸig der Deque-Container verwendet. Containeradapter unterstรผtzen keine Iteratoren und kรถnnen daher nicht zum Bearbeiten von Daten verwendet werden.

Stack-Syntax

Um einen Stapel zu erstellen, mรผssen wir Folgendes einschlieรŸen Header-Datei in unserem Code. AnschlieรŸend verwenden wir diese Syntax, um den std::stack zu definieren:

template <class Type, class Container = deque<Type> > class stack;
  • Typ โ€“ ist der Typ des Elements im std::stack. Es kann jeder gรผltige C++ Typ oder sogar ein benutzerdefinierter Typ.
  • Container โ€“ ist der Typ des zugrunde liegenden Containerobjekts.

Mitgliedstypen

Hier sind Stack-Mitgliedstypen:

  • value_type โ€“ Der erste Vorlagenparameter, T. Er bezeichnet die Elementtypen.
  • container_type โ€“ Der zweite Vorlagenparameter, Container. Es bezeichnet den zugrunde liegenden Containertyp.
  • size_type โ€“ Vorzeichenloser Integraltyp.

Operationen im Stack

A C++ Der Stack unterstรผtzt die folgenden grundlegenden Operationen:

  • push โ€“ Es fรผgt ein Element zum Stapel hinzu bzw. schiebt es in den Stapel.
  • pop โ€“ Es entfernt/platziert ein Element vom Stapel.
  • peek โ€“ Gibt das oberste Element des Stapels zurรผck, ohne es zu entfernen.
  • isFull โ€“ Prรผft, ob ein Stapel voll ist.
  • isEmpty โ€“ Prรผft, ob ein Stapel leer ist.

Stack-Implementierung

Stack-Implementierung

Schritt 1) Wir haben zunรคchst einen leeren Stapel. Die Oberseite eines leeren Stapels wird auf -1 gesetzt.

Schritt 2) Als nรคchstes haben wir das Element 5 in den Stapel geschoben. Die Oberseite des Stapels zeigt auf das Element 5.

Schritt 3) Als nรคchstes haben wir das Element 50 in den Stapel geschoben. Die Spitze des Stapels verschiebt sich und zeigt auf das Element 50.

Schritt 4) Wir haben dann eine Pop-Operation ausgefรผhrt und das oberste Element vom Stapel entfernt. Das Element 50 wird vom Stapel entfernt. Die Oberseite des Stapels zeigt jetzt auf das Element 5.

push() und pop()

Die Funktionen stack::push() fรผgen ein neues Element oben im Stapel hinzu. Die StapelgrรถรŸe wird nach dem Einfรผgen um 1 erhรถht. Die Funktion verwendet diese Syntax:

stack.push(value)

Der Wert ist das Element, das in den Stapel eingefรผgt werden soll.

Die Funktion stack::pop() entfernt das oberste Element des Stapels. Dies ist das neueste Element im Stapel. Die StapelgrรถรŸe wird nach dem Entfernen um 1 reduziert. Hier ist die Funktionssyntax:

stack.pop()

Die Funktion benรถtigt keine Parameter.

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

Ausgang:

push() und pop()

Hier ist ein Screenshot des Codes:

push() und pop()

Code Erlรคuterung:

  1. Fรผgen Sie die iostream-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
  2. Fรผgen Sie die Stack-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
  3. Fรผgen Sie den std-Namespace in unseren Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
  4. Rufen Sie die Funktion main() auf. Die Programmlogik sollte innerhalb dieser Funktion hinzugefรผgt werden.
  5. Erstellen Sie einen Stack st, um ganzzahlige Werte zu speichern.
  6. Verwenden Sie die Funktion push(), um den Wert 10 in den Stapel einzufรผgen.
  7. Verwenden Sie die Funktion push(), um den Wert 20 in den Stapel einzufรผgen.
  8. Verwenden Sie die Funktion push(), um den Wert 30 in den Stapel einzufรผgen.
  9. Verwenden Sie die Funktion push(), um den Wert 40 in den Stapel einzufรผgen.
  10. Verwenden Sie die Funktion pop(), um das oberste Element aus dem Stapel zu entfernen, also 40. Das oberste Element wird jetzt zu 30.
  11. Verwenden Sie die Funktion pop(), um das oberste Element aus dem Stapel zu entfernen, also 30. Das oberste Element wird jetzt zu 20.
  12. Verwenden Sie eine while-Schleife und die Funktion empty(), um zu prรผfen, ob der Stapel NICHT leer ist. Das ! ist der NICHT-Operator.
  13. Drucken des aktuellen Inhalts des Stapels auf der Konsole.
  14. Rufen Sie die Funktion pop() auf dem Stapel auf.
  15. Ende des Kรถrpers der while-Schleife.
  16. Ende des main()-Funktionskรถrpers.

empty(), size(), top()

Stapel verfรผgen รผber integrierte Funktionen, mit denen Sie mit dem Stapel und seinen Werten experimentieren kรถnnen. Diese beinhalten:

  • empty() โ€“ prรผft, ob ein Stapel leer ist oder nicht.
  • size() โ€“ gibt die GrรถรŸe des Stapels zurรผck, d. h. die Anzahl der Elemente in einem Stapel.
  • top() โ€“ greift auf das Stapelelement oben zu.

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

Ausgang:

empty(),size(),top()

Hier ist ein Screenshot des Codes:

empty(),size(),top()

Code Erlรคuterung:

  1. Binden Sie die iostream-Header-Datei in unseren Code ein, um deren Funktionen nutzen zu kรถnnen.
  2. Binden Sie die Stack-Header-Datei in unseren Code ein, um deren Funktionen nutzen zu kรถnnen.
  3. Fรผgen Sie den std-Namespace in unser Programm ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
  4. Erstellen Sie die Funktion createStack, mit der wir den Stack mystack erstellen kรถnnen. Der Stapel enthรคlt eine Reihe von Ganzzahlen.
  5. Der Anfang des Hauptteils der Funktion createStack.
  6. Erstellen Sie eine Instanz des Mystack-Datentyps und geben Sie ihr den Namen ms.
  7. Verwenden Sie die while-Schleife und die Funktion empty(), um zu รผberprรผfen, ob der Stapel leer ist.
  8. Der Anfang des Hauptteils der while-Schleife.
  9. Verwenden Sie die Funktion top(), die oben im Stapel gespeichert ist. Das Zeichen \t erstellt einen neuen Tab.
  10. Verwenden Sie die Funktion pop(), um das Element oben im Stapel zu lรถschen.
  11. Ende des Kรถrpers der while-Schleife.
  12. Drucken Sie eine Leerzeile auf der Konsole.
  13. Ende des Hauptteils der Funktion createStack.
  14. Rufen Sie die Funktion main() auf. Die Programmlogik sollte im Hauptteil der Funktion main() hinzugefรผgt werden.
  15. Der Beginn des Hauptteils der Funktion main().
  16. Erstellen Sie ein Stapelobjekt st.
  17. Verwenden Sie die Funktion push(), um das Element 32 in den Stapel einzufรผgen.
  18. Verwenden Sie die Funktion push(), um das Element 21 in den Stapel einzufรผgen.
  19. Verwenden Sie die Funktion push(), um das Element 39 in den Stapel einzufรผgen.
  20. Verwenden Sie die Funktion push(), um das Element 89 in den Stapel einzufรผgen.
  21. Verwenden Sie die Funktion push(), um das Element 25 in den Stapel einzufรผgen.
  22. Drucken Sie einen Text auf der Konsole.
  23. Rufen Sie die Funktion โ€žcreateStackโ€œ auf, um die oben genannten Einfรผgevorgรคnge im Stapel auszufรผhren.
  24. Drucken Sie die GrรถรŸe des Stapels zusammen mit anderem Text auf der Konsole aus.
  25. Drucken Sie das Element oben im Stapel auf der Konsole.
  26. Drucken Sie einen Text auf der Konsole.
  27. Lรถschen Sie das Element oben im Stapel. AnschlieรŸend werden die im Stapel verbleibenden Elemente zurรผckgegeben.
  28. Rufen Sie die Funktion โ€žcreateStackโ€œ auf, um die oben genannten Vorgรคnge auszufรผhren.
  29. Das Programm muss bei erfolgreichem Abschluss einen Wert zurรผckgeben.
  30. Ende des Hauptteils der Funktion main().

emplace() und swap()

Dies sind weitere integrierte Stack-Funktionen:

  • emplace()-Konstrukte fรผgen dann ein neues Element oben im Stapel ein.
  • swap() โ€“ tauscht den Inhalt des Stapels mit dem Inhalt eines anderen Stapels aus.

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

Ausgang:

emplace()& swap()

Hier ist ein Screenshot des Codes:

emplace()& swap()

Code Erlรคuterung:

  1. Fรผgen Sie die iostream-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
  2. Fรผgen Sie die Stack-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
  3. Fรผgen Sie die cstdlib-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
  4. Fรผgen Sie den std-Namespace in unseren Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
  5. Rufen Sie die Funktion main() auf. Die Programmlogik wird im Hauptteil dieser Funktion hinzugefรผgt.
  6. Deklarieren Sie einen Stack mit dem Namen st1, um ganzzahlige Werte zu speichern.
  7. Deklarieren Sie einen Stack mit dem Namen st2, um ganzzahlige Werte zu speichern.
  8. Verwenden Sie die Funktion emplace(), um die Ganzzahl 12 in den Stapel mit dem Namen st1 einzufรผgen.
  9. Verwenden Sie die Funktion emplace(), um die Ganzzahl 19 in den Stapel mit dem Namen st1 einzufรผgen.
  10. Verwenden Sie die Funktion emplace(), um die Ganzzahl 20 in den Stapel mit dem Namen st2 einzufรผgen.
  11. Verwenden Sie die Funktion emplace(), um die Ganzzahl 23 in den Stapel mit dem Namen st2 einzufรผgen.
  12. Verwenden Sie die Funktion swap(), um den Inhalt der beiden Stapel st1 und st2 auszutauschen. Der Inhalt des Stacks st1 soll auf den Stack st2 verschoben werden. Der Inhalt des Stacks st2 soll auf den Stack st1 verschoben werden.
  13. Drucken Sie einen Text auf der Konsole.
  14. Verwenden Sie die while-Anweisung und die Funktion empty(), um zu prรผfen, ob der Stack st1 nicht leer ist.
  15. Drucken Sie den Inhalt des Stacks st1 auf der Konsole. Das โ€ž โ€œ fรผgt beim Drucken auf der Konsole Platz zwischen den Stapelelementen hinzu.
  16. Fรผhren Sie die Funktion pop() auf dem Stapel st1 aus, um das oberste Element zu entfernen.
  17. Ende des Hauptteils der while-Anweisung.
  18. Drucken Sie einen Text auf der Konsole. Das Endl ist ein C++ Schlรผsselwort fรผr Zeilenende. Es bewegt den Mauszeiger zur nรคchsten Zeile, um dort mit dem Drucken zu beginnen.
  19. Verwenden Sie die while-Anweisung und die Funktion empty(), um zu prรผfen, ob der Stack st2 nicht leer ist.
  20. Drucken Sie den Inhalt des Stacks st2 auf der Konsole. Das โ€ž โ€œ fรผgt beim Drucken auf der Konsole Platz zwischen den Stapelelementen hinzu.
  21. Fรผhren Sie die Funktion pop() auf dem Stapel st2 aus, um das oberste Element zu entfernen.
  22. Ende des Hauptteils der while-Anweisung.
  23. Ende des Hauptteils der main()-Funktion.

Stapeln Sie in STL

Die STL (Standard Template Library) enthรคlt Vorlagenklassen, die allgemeine C++ Datenstrukturen. Daher kann ein Stack auch in STL implementiert werden. Wir binden diese Bibliothek einfach in unseren Code ein und verwenden sie, um einen Stack zu definieren.

stack<T> st; 

Die obige Syntax deklariert einen Stapel st fรผr Elemente des Datentyps T.

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

Ausgang:

Stapeln Sie in STL

Hier ist ein Screenshot des Codes:

Stapeln Sie in STL

Code Erlรคuterung:

  1. Fรผgen Sie die iostream-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
  2. Fรผgen Sie die Stack-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
  3. Fรผgen Sie die cstdlib-Header-Datei in unseren Code ein, um ihre Funktionen zu nutzen.
  4. Fรผgen Sie den std-Namespace in unseren Code ein, um seine Klassen zu verwenden, ohne ihn aufzurufen.
  5. Rufen Sie die Funktion main() auf. Die Programmlogik sollte im Hauptteil dieser Funktion hinzugefรผgt werden.
  6. Deklarieren Sie einen Stack st, um ganzzahlige Daten zu speichern.
  7. Fรผgen Sie das Element 12 zum Stapel hinzu.
  8. Fรผgen Sie das Element 19 zum Stapel hinzu.
  9. Fรผgen Sie das Element 20 zum Stapel hinzu.
  10. Drucken Sie das Element oben im Stapel auf der Konsole.
  11. Drucken Sie die GrรถรŸe des Stapels auf der Konsole aus.
  12. Ende des Hauptteils der Funktion main().

Zusammenfassung

  • Ein Stapel ist eine Datenstruktur, die auf Basis der LIFO-Technik (Last In First Out) arbeitet.
  • Der std::stack erlaubt nur das Hinzufรผgen und Entfernen von Elementen an einem Ende.
  • Die Klasse std::stack ist ein Containeradapter, der Elemente eines รคhnlichen Datentyps enthรคlt.
  • Ein Stack kann aus verschiedenen Sequenzcontainern erstellt werden.
  • Wenn Sie keinen Container angeben, wird standardmรครŸig der Deque-Container verwendet.
  • Die Funktion push() dient zum Einfรผgen von Elementen in den Stapel.
  • Die Funktion pop() dient zum Entfernen des obersten Elements aus dem Schritt.
  • Mit der Funktion empty() wird รผberprรผft, ob ein Stapel leer ist oder nicht.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: