Apilar en C++ STL con ejemplo
ยฟQuรฉ es std::stack?
Una pila es una estructura de datos que funciona segรบn la tรฉcnica LIFO (Last In First Out). La pila std::stack permite agregar y quitar elementos desde un solo extremo.
La clase std::stack es un adaptador de contenedor. Los objetos contenedores contienen datos de un tipo de datos similar. Puede crear una pila a partir de varios contenedores de secuencias. Si no se proporciona ningรบn contenedor, el contenedor deque se utilizarรก de forma predeterminada. Los adaptadores de contenedor no admiten iteradores, por lo que no se pueden utilizar para manipular datos.
Sintaxis de pila
Para crear una pila, debemos incluir el archivo de encabezado en nuestro cรณdigo. Luego usamos esta sintaxis para definir std::stack:
template <class Type, class Container = deque<Type> > class stack;
- Tipo โ es el tipo de elemento contenido en std::stack. Puede ser cualquier valido C++ tipo o incluso un tipo definido por el usuario.
- Envase โ es el tipo de objeto contenedor subyacente.
Tipos de miembros
Estos son los tipos de miembros de la pila:
- value_type: el primer parรกmetro de plantilla, T. Denota los tipos de elementos.
- container_type: el segundo parรกmetro de plantilla, Container. Denota el tipo de contenedor subyacente.
- size_type: tipo integral sin signo.
Operaciones en pila
A C++ La pila admite las siguientes operaciones bรกsicas:
- push: agrega/empuja un elemento a la pila.
- pop: elimina/saca un elemento de la pila.
- vistazo: devuelve el elemento superior de la pila sin eliminarlo.
- isFull: comprueba si una pila estรก llena.
- isEmpty: comprueba si una pila estรก vacรญa.
Implementaciรณn de pila
Paso 1) Inicialmente tenemos una pila vacรญa. La parte superior de una pila vacรญa se establece en -1.
Paso 2) A continuaciรณn, hemos empujado el elemento 5 a la pila. La parte superior de la pila apuntarรก al elemento 5.
Paso 3) A continuaciรณn, hemos introducido el elemento 50 en la pila. La parte superior de la pila se desplaza y apunta al elemento 50.
Paso 4) Luego hemos realizado una operaciรณn de extracciรณn, eliminando el elemento superior de la pila. El elemento 50 se extrae de la pila. La parte superior de la pila ahora apunta al elemento 5.
empujar() y hacer estallar()
Las funciones stack::push() agregan un nuevo elemento a la parte superior de la pila. El tamaรฑo de la pila aumenta en 1 despuรฉs de la inserciรณn. La funciรณn toma esta sintaxis:
stack.push(value)
El valor es el elemento que se insertarรก en la pila.
La funciรณn stack:: pop() elimina el elemento superior de la pila. Este es el elemento mรกs nuevo de la pila. El tamaรฑo de la pila se reduce en 1 despuรฉs de la eliminaciรณn. Aquรญ estรก la sintaxis de la funciรณn:
stack.pop()
La funciรณn no toma parรกmetros.
Ejemplo 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();
}
}
Salida:
Aquรญ hay una captura de pantalla del cรณdigo:
Explicaciรณn del cรณdigo:
- Incluya el archivo de encabezado iostream en nuestro cรณdigo para usar sus funciones.
- Incluya el archivo de encabezado de la pila en nuestro cรณdigo para usar sus funciones.
- Incluya el espacio de nombres estรกndar en nuestro cรณdigo para usar sus clases sin llamarlo.
- Llame a la funciรณn principal(). La lรณgica del programa debe agregarse dentro de esta funciรณn.
- Cree una pila st para almacenar valores enteros.
- Utilice la funciรณn push() para insertar el valor 10 en la pila.
- Utilice la funciรณn push() para insertar el valor 20 en la pila.
- Utilice la funciรณn push() para insertar el valor 30 en la pila.
- Utilice la funciรณn push() para insertar el valor 40 en la pila.
- Utilice la funciรณn pop() para eliminar el elemento superior de la pila, es decir, 40. El elemento superior ahora pasa a ser 30.
- Utilice la funciรณn pop() para eliminar el elemento superior de la pila, es decir, 30. El elemento superior ahora se convierte en 20.
- Utilice un bucle while y la funciรณn empty() para comprobar si la pila NO estรก vacรญa. El ! es el operador NOT.
- Imprimir el contenido actual de la pila en la consola.
- Llame a la funciรณn pop() en la pila.
- Fin del cuerpo del bucle while.
- Fin del cuerpo de la funciรณn main().
vacรญo(), tamaรฑo(), superior()
Las pilas tienen funciones incorporadas que puedes usar para jugar con la pila y sus valores. รstas incluyen:
- vacรญo(): comprueba si una pila estรก vacรญa o no.
- size(): devuelve el tamaรฑo de la pila, es decir, el nรบmero de elementos de una pila.
- top(): accede al elemento de la pila en la parte superior.
Ejemplo 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;
}
Salida:
Aquรญ hay una captura de pantalla del cรณdigo:
Explicaciรณn del cรณdigo:
- Incluya el archivo de encabezado iostream en nuestro cรณdigo para poder utilizar sus funciones.
- Incluya el archivo de encabezado de la pila en nuestro cรณdigo para poder utilizar sus funciones.
- Incluya el espacio de nombres estรกndar en nuestro programa para poder usar sus clases sin llamarlo.
- Crea la funciรณn createStack que podemos usar para crear la pila mystack. La pila contendrรก un conjunto de nรบmeros enteros.
- El comienzo del cuerpo de la funciรณn createStack.
- Cree una instancia del tipo de datos mystack y asรญgnele el nombre ms.
- Utilice el bucle while y la funciรณn vacรญa() para comprobar si la pila estรก vacรญa.
- El inicio del cuerpo del bucle while.
- Utilice la funciรณn top() almacenada en la parte superior de la pila. El carรกcter \t crearรก una nueva pestaรฑa.
- Utilice la funciรณn pop() para eliminar el elemento en la parte superior de la pila.
- Fin del cuerpo del bucle while.
- Imprime una lรญnea en blanco en la consola.
- Fin del cuerpo de la funciรณn createStack.
- Llame a la funciรณn principal(). La lรณgica del programa debe agregarse dentro del cuerpo de la funciรณn main().
- El inicio del cuerpo de la funciรณn main().
- Crea un objeto de pila st.
- Utilice la funciรณn push() para insertar el elemento 32 en la pila.
- Utilice la funciรณn push() para insertar el elemento 21 en la pila.
- Utilice la funciรณn push() para insertar el elemento 39 en la pila.
- Utilice la funciรณn push() para insertar el elemento 89 en la pila.
- Utilice la funciรณn push() para insertar el elemento 25 en la pila.
- Imprime algo de texto en la consola.
- Llame a la funciรณn createStack para ejecutar las operaciones de inserciรณn anteriores en la pila.
- Imprima el tamaรฑo de la pila en la consola junto con otro texto.
- Imprime el elemento en la parte superior de la pila en la consola.
- Imprime algo de texto en la consola.
- Elimina el elemento en la parte superior de la pila. Luego devolverรก los elementos que quedan en la pila.
- Llame a la funciรณn createStack para ejecutar las operaciones anteriores.
- El programa debe devolver valor una vez completado con รฉxito.
- Fin del cuerpo de la funciรณn main().
emplazar() e intercambiar()
Estas son otras funciones de pila incorporadas:
- emplace(): construye y luego inserta un nuevo elemento en la parte superior de la pila.
- swap(): intercambia el contenido de la pila con el contenido de otra pila.
Ejemplo 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();
}
}
Salida:
Aquรญ hay una captura de pantalla del cรณdigo:
Explicaciรณn del cรณdigo:
- Incluya el archivo de encabezado iostream en nuestro cรณdigo para usar sus funciones.
- Incluya el archivo de encabezado de la pila en nuestro cรณdigo para usar sus funciones.
- Incluya el archivo de encabezado cstdlib en nuestro cรณdigo para usar sus funciones.
- Incluya el espacio de nombres estรกndar en nuestro cรณdigo para usar sus clases sin llamarlo.
- Llame a la funciรณn principal(). La lรณgica del programa se agregarรก dentro del cuerpo de esta funciรณn.
- Declare una pila llamada st1 para almacenar valores enteros.
- Declare una pila llamada st2 para almacenar valores enteros.
- Utilice la funciรณn emplace() para insertar el nรบmero entero 12 en la pila denominada st1.
- Utilice la funciรณn emplace() para insertar el nรบmero entero 19 en la pila denominada st1.
- Utilice la funciรณn emplace() para insertar el nรบmero entero 20 en la pila denominada st2.
- Utilice la funciรณn emplace() para insertar el nรบmero entero 23 en la pila denominada st2.
- Utilice la funciรณn swap() para intercambiar el contenido de las dos pilas, st1 y st2. El contenido de la pila st1 debe moverse a la pila st2. El contenido de la pila st2 debe moverse a la pila st1.
- Imprime algo de texto en la consola.
- Utilice la instrucciรณn while y la funciรณn vacรญa() para comprobar si la pila st1 no estรก vacรญa.
- Imprime el contenido de la pila st1 en la consola. El " " agrega espacio entre los elementos de la pila al imprimirlos en la consola.
- Ejecute la funciรณn pop() en la pila st1 para eliminar el elemento superior.
- Fin del cuerpo de la declaraciรณn while.
- Imprime algo de texto en la consola. El final es un C++ palabra clave para la lรญnea final. Mueve el cursor del mouse a la siguiente lรญnea para comenzar a imprimir desde allรญ.
- Utilice la instrucciรณn while y la funciรณn vacรญa() para comprobar si la pila st2 no estรก vacรญa.
- Imprime el contenido de la pila st2 en la consola. El " " agrega espacio entre los elementos de la pila al imprimirlos en la consola.
- Ejecute la funciรณn pop() en la pila st2 para eliminar el elemento superior.
- Fin del cuerpo de la declaraciรณn while.
- Fin del cuerpo de la funciรณn main().
Apilar en STL
La STL (Biblioteca de plantillas estรกndar) viene con clases de plantillas que proporcionan C++ estructuras de datos. Por lo tanto, tambiรฉn se puede implementar una pila en STL. Simplemente incluimos esta biblioteca en nuestro cรณdigo y la usamos para definir una pila.
stack<T> st;
La sintaxis anterior declara una pila st a elementos del tipo de datos T.
Ejemplo 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();
}
Salida:
Aquรญ hay una captura de pantalla del cรณdigo:
Explicaciรณn del cรณdigo:
- Incluya el archivo de encabezado iostream en nuestro cรณdigo para usar sus funciones.
- Incluya el archivo de encabezado de la pila en nuestro cรณdigo para usar sus funciones.
- Incluya el archivo de encabezado cstdlib en nuestro cรณdigo para usar sus funciones.
- Incluya el espacio de nombres estรกndar en nuestro cรณdigo para usar sus clases sin llamarlo.
- Llame a la funciรณn principal(). La lรณgica del programa debe agregarse dentro del cuerpo de esta funciรณn.
- Declare una pila st para almacenar datos enteros.
- Agrega el elemento 12 a la pila.
- Agrega el elemento 19 a la pila.
- Agrega el elemento 20 a la pila.
- Imprime el elemento en la parte superior de la pila en la consola.
- Imprime el tamaรฑo de la pila en la consola.
- Fin del cuerpo de la funciรณn main().
Resumen
- Una pila es una estructura de datos que opera segรบn la tรฉcnica LIFO (รltimo en entrar, primero en salir).
- El std::stack solo permite agregar y eliminar elementos desde un extremo.
- La clase std::stack es un adaptador de contenedor que contiene elementos de un tipo de datos similar.
- Se puede crear una pila a partir de varios contenedores de secuencias.
- Si no proporciona un contenedor, el contenedor deque se utilizarรก de forma predeterminada.
- La funciรณn push() es para insertar elementos en la pila.
- La funciรณn pop() sirve para eliminar el elemento superior del paso.
- La funciรณn vacรญa() sirve para comprobar si una pila estรก vacรญa o no.






