剑指 oferta nº 09. Cola con dos pilas

Enlace de tema

Descripción del Título:

Implemente una cola con dos pilas. La siguiente cola de instrucciones, implementa sus dos funciones appendTaily deleteHead, respectivamente, para completar la inserción y eliminación del entero entero en la cola de la cola en la cabecera de la función de cola. (Si no hay ningún elemento en la cola, la deleteHeadoperación devuelve -1)

Ejemplo 1:

Entrada:
["CQueue", "appendTail", "deleteHead", "deleteHead"]
[[], [3], [], []]
Salida: [null, null, 3, -1]

Ejemplo 2:

Entrada:
["CQueue", "deleteHead", "appendTail", "appendTail", "deleteHead", "deleteHead"]
[[], [], [5], [2], [], []]
Salida: [nulo, -1, nulo, nulo, 5,2]

Ideas para resolver problemas

  Primero, comprenda el significado de la matriz de cadenas del ejemplo dado por el título: CQueueinicializar, appendTailponer en cola, deleteHeadquitar de la cola y devolver el elemento quitado de la cola. En otras palabras, la matriz de cadenas es la instrucción para registrar la operación, y la matriz de entrada int contiene los elementos que deben ponerse en cola. Preste atención a la matriz de salida aquí, no se refiere al estado de los elementos en la cola actual, solo se refiere al retorno de cada operación, de hecho, solo hay deleteHeadretorno.
  El segundo es usar la pila dual para darse cuenta de la idea de ingresar la cola en la cola. Para aclarar las características de estas dos estructuras de datos, la pila es el primero en entrar, el último en salir y la cola es el primero en entrar, primero en salir. Obviamente, una sola pila no puede realizar la puesta en cola y la operación de puesta en cola de la cola, entonces, ¿cómo usar la pila dual? En un ejemplo, 1,2,3los elementos se colocan secuencialmente en la primera pila input, esta vez inputdesde la parte superior de la pila hasta la parte inferior de la pila de elementos secuencialmente 3,2,1. Ahora quiero lograr el orden de eliminación de la cola 1,2,3, sacar los elementos de la primera pila uno por uno y empujarlos a la segunda pila output. En este momento output, los elementos desde la parte superior de la pila hasta la parte inferior de 1,2,3la pila están en orden. Obviamente , el orden de aparición es en este momento 1,2,3, es decir, la pila dual se utiliza para realizar la operación de cola.
  El último es el diseño funcional de las tres funciones.

  1. El título no requiere que hagamos algo durante la inicialización, por lo que CQueuese puede ignorar el constructor ;
  2. Según el ejemplo, encontramos que ingresar al equipo appendTailno requiere un valor de retorno, solo ingresar al equipo está bien. Por lo tanto, se puede resolver una línea de código de apilamiento;
  3. deleteHeadLa operación de sacar de cola requiere un análisis de pérdida, no solo requiere que el elemento sea retirado de la cola, sino que también devuelve el elemento retirado de la cola, y cuando el equipo está vacío, debe devolverse.-1

    lógica if-else

    1. Si inputy outputestán vacíos, lo que indica que la cola está vacía en este momento, regresa -1;
    2. De lo contrario, no importa inputsi está vacío o no en este momento , siempre que no esté outputvacío, significa que outputtodavía hay elementos despoblados y se prefiere la operación output;
    3. De lo contrario, outputvacío y inputno vacío, necesitamos inputtodos los elementos presionados outputy luego operar output.

  Ahora proporcione los códigos de versión de C ++ y JavaScript ~

c ++

class CQueue {
    
    
public:
    CQueue() {
    
    

    }
    
    void appendTail(int value) {
    
    
        input.push(value);
    }
    
    int deleteHead() {
    
    
        if(input.empty() && output.empty()) //双栈均为空
            return -1;
        else if(!output.empty()){
    
              //output栈不为空,说明还有未出队的元素
            int result = output.top();
            output.pop();
            return result;
        }
        else{
    
                                 //output栈为空,再执行删除需要input元素出栈入栈
            while(!input.empty()){
    
    
                int value = input.top();
                input.pop();
                output.push(value);
            }

            int result = output.top();
            output.pop();
            return result;
        }
        
    }
private:
    stack<int> input;
    stack<int> output;
};


JavaScript

var CQueue = function() {
    
    
    this.output = [];
    this.input = [];
};

/** 
 * @param {number} value
 * @return {void}
 */
CQueue.prototype.appendTail = function(value) {
    
    
    this.input.push(value);
};

/**
 * @return {number}
 */
CQueue.prototype.deleteHead = function() {
    
    
    const {
    
    input, output} = this;       //es6 解构赋值
    if(!output.length && !input.length){
    
    
        return -1;
    }
    else if(output.length){
    
    
        return output.pop();
    }
    else{
    
    
        while(input.length){
    
    
            output.push(input.pop());
        }
        return output.pop();
    }
};

Si hay errores o no es riguroso, corrígeme, muchas gracias.
Mi blog: http://breadhunter.gitee.io

Supongo que te gusta

Origin blog.csdn.net/weixin_40807714/article/details/104958644
Recomendado
Clasificación