Campamento de entrenamiento de algoritmos de grabación aleatoria de código 15.º día 10 Bases teóricas, 232. Implementación de colas con pilas, 225. Implementación de pilas con colas

bases teóricas

Las colas son las primeras en entrar, las primeras en salir y las pilas son las primeras en entrar, las últimas en salir.

Cuatro preguntas:

  1. ¿Es stack un contenedor en C++?
  2. ¿A qué versión del STL pertenece la pila que usamos?
  3. ¿Cómo se implementa la pila en el STL que usamos?
  4. ¿La pila proporciona un iterador para atravesar el espacio de la pila?

La pila y la cola son dos estructuras de datos en STL (Biblioteca estándar de C++).

La pila proporciona interfaces como push y pop, y todos los elementos deben ajustarse a la regla del primero en entrar, el último en salir, por lo que la pila no proporciona la función de visita ni iteradores. A diferencia de set o map, iterator iterator se proporciona para recorrer todos los elementos.

La pila usa el contenedor subyacente para completar todo su trabajo y proporciona una interfaz unificada con el mundo exterior. El contenedor subyacente es conectable (es decir, podemos controlar qué contenedor se usa para implementar la función de la pila)

La estructura interna de la pila, la implementación subyacente de la pila puede ser vector, deque, lista son posibles, principalmente la implementación subyacente de la matriz y la lista vinculada.

232. Implementar una cola con una pila

Las colas son las primeras en entrar, las primeras en salir y las pilas son las primeras en entrar, las últimas en salir.

Lo he aprendido antes, y lo he olvidado hace mucho tiempo. Aquí debe prestar atención a tres conceptos, a saber, push, pop y top. Si comprende estos tres conceptos, puede realizar operaciones posteriores. El código se ve así:

class MyQueue {
public:
    //首先声明两个栈,一个入栈一个出栈
    stack<int> in;
    stack<int> out;

    MyQueue() {

    }
    
    void push(int x) {
        //入栈过程
        in.push(x);

    }
    
    int pop() {
        //首先判断出栈是否为空
        while(out.empty())
        {
            //判断入栈是否为空,在不为空的情况下
            while(!in.empty())
            {
                out.push(in.top());
                in.pop();
            }
        }
        int result = out.top();
        out.pop();
        return result;

    }
    
    int peek() {
        int result1 = this->pop();
        out.push(result1);
        return result1;

    }
    
    bool empty() {
        return in.empty()&&out.empty();

    }
};

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue* obj = new MyQueue();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->peek();
 * bool param_4 = obj->empty();
 */

225. Implementar una pila con cola

El proceso de aparición de elementos es sacar el tamaño anterior () -1 y luego agregarlo más tarde.

Este código es relativamente simple y se ejecuta con éxito una vez.

class MyStack {
public:

    //首先声明队列
    queue<int> que;

    MyStack() {

    }
    
    void push(int x) {
        que.push(x);

    }
    
    int pop() {
        int queSize = que.size();

        queSize = queSize - 1;//首先将数目减一操作

        while(queSize--)
        {
            que.push(que.front());
            que.pop();
        }

        int result = que.front();

        que.pop();

        return result;
    }
    
    int top() {

        return que.back();

    }
    
    bool empty() {
        return que.empty();
    }
};

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack* obj = new MyStack();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->top();
 * bool param_4 = obj->empty();
 */

Supongo que te gusta

Origin blog.csdn.net/m0_47489229/article/details/131002490
Recomendado
Clasificación