Día 25 Contenedor de pila C ++ (pila)

concepto básico de pila

definición

En C++, una pila (pila) es una estructura de datos común que adopta el principio de último en entrar, primero en salir (LIFO). La característica de la pila es que tiene una sola salida y solo permite operaciones de inserción y eliminación en un extremo, que se denomina parte superior de la pila. En la pila, solo se puede acceder y manipular el elemento en la parte superior de la pila, mientras que no se puede acceder directamente a otros elementos. El mundo exterior solo puede utilizar el elemento superior de la pila, por lo que la pila no permite el comportamiento transversal.

Por favor agregue una descripción de la imagen.

concepto basico

Parte superior de la pila (Top): apunta a la posición del elemento más superior de la pila.
Empujar (Push): agrega el elemento a la parte superior de la pila.
Pop: elimina un elemento de la parte superior de la pila.
Vacío: cuando no hay elementos en la pila, se llama vacío.
Tamaño de la pila (Tamaño): indica la cantidad de elementos en la pila.

Interfaz común de pila

Constructor

  • stack<T> stk;La pila se implementa mediante una clase de plantilla y la forma de construcción predeterminada del objeto de la pila.
  • stack(const stack &stk);constructor de copias

operación de asignación

  • stack& operator=(const stack &stk);operador igual sobrecargado

acceso a los datos

  • push(elem);Agregar un elemento a la parte superior de la pila
  • pop();eliminar el primer elemento de la parte superior de la pila
  • top(); Devuelve el elemento superior de la pila.

operación de tamaño

  • empty();Compruebe si la pila está vacía
  • size(); Devuelve el tamaño de la pila.

ejemplo

el código

#include <iostream>
#include <stack>

int main() {
    std::stack<int> stk;

    // 判断栈是否为空
    if (stk.empty()) {
        std::cout << "栈为空" << std::endl;
    }

    // 向栈中添加元素
    stk.push(10);
    stk.push(20);
    stk.push(30);

    // 返回栈顶元素
    std::cout << "栈顶元素为:" << stk.top() << std::endl;

    // 移除栈顶元素
    stk.pop();

    // 再次返回栈顶元素
    std::cout << "栈顶元素为:" << stk.top() << std::endl;

    // 获取栈的大小
    std::cout << "栈的大小为:" << stk.size() << std::endl;

    return 0;
}

El resultado de la operación es el siguiente:

栈为空
栈顶元素为:30
栈顶元素为:20
栈的大小为:2

analizar

Este ejemplo crea un objeto de pila entero std::stack stk
, luego usa el método vacío() para determinar si la pila está vacía
y luego usa el método push(elem) para agregar los elementos 10, 20 y 30 a la pila en doblar. Utilice el método top() para obtener el valor del elemento superior de la pila
, luego utilice el método pop() para eliminar el elemento superior de la pila
y, finalmente, utilice el método size() para devolver el tamaño de la pila.

Resumir

  • En la pila: empuje
  • salir - pop
  • Volver a la parte superior de la pila: arriba
  • Determinar si la pila está vacía: vacía
  • tamaño de pila de retorno - tamaño

Escenarios de aplicación comunes

llamadas a funciones y recursividad

En una llamada a función, cada vez que se ingresa una nueva función, la información de la llamada a la función (como la dirección de retorno, variables locales, etc.) se puede insertar en la pila a través de la parte superior de la pila. Se implementó la recursividad y el retorno de llamadas a funciones.

evaluación de expresión

En algunos escenarios donde es necesario analizar expresiones, se pueden usar pilas para evaluar expresiones. Por ejemplo, una expresión infija se convierte en una expresión postfija y luego la expresión postfija se evalúa utilizando la pila.

coincidencia de soportes

Al tratar con problemas de coincidencia de paréntesis, se pueden utilizar pilas para verificar que los paréntesis coincidan. Cuando encuentre un paréntesis izquierdo, empújelo hacia la pila; cuando encuentre un paréntesis derecho, determine si el elemento superior de la pila es el paréntesis izquierdo correspondiente; en caso afirmativo, extraiga el elemento superior de la pila y continúe juzgando el siguiente carácter; si no, explique el paréntesis No coincide.

Funciones de avance y retroceso del navegador

En las funciones de avance y retroceso del navegador, se pueden implementar dos pilas. Una pila se usa para almacenar el historial de las páginas visitadas por el usuario y la otra pila se usa para almacenar el historial de las páginas que deben regresarse cuando el usuario hace clic en el botón Atrás.

deshacer operación

En algunas aplicaciones, como editores de texto y software de dibujo, se pueden utilizar pilas para implementar operaciones de deshacer. Siempre que el usuario realiza una operación, la información de la operación se almacena en la pila y, cuando es necesario deshacer la operación, la información de la operación más reciente se toma de la parte superior de la pila y se revierte.

En el algoritmo de búsqueda en profundidad (DFS), se puede utilizar una pila para implementar el recorrido de un gráfico o árbol.

Coloque el nodo inicial en la pila y luego realice los siguientes pasos en un bucle: saque un nodo de la parte superior de la pila, visite el nodo e inserte sus nodos vecinos no visitados en la pila. Repita hasta que la pila esté vacía.

Al resolver problemas de laberintos, se puede implementar un algoritmo de retroceso utilizando una pila.

Coloque la posición inicial en la pila y luego realice los siguientes pasos en un bucle: saque una posición desde la parte superior de la pila, intente moverse hacia arriba, abajo, izquierda y derecha, si se puede mover, actualice la posición y colóquelo en la pila hasta que se encuentre la posición objetivo o la pila sea nula.

Supongo que te gusta

Origin blog.csdn.net/m0_74921567/article/details/132181435
Recomendado
Clasificación