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-Erklärung:

  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-Erklärung:

  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-Erklärung:

  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-Erklärung:

  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.