[Java] 232. Use la pila para implementar la cola --- ¡aprenda rápidamente el uso de la clase Stack (pila)! ! !

Utilice solo dos pilas para implementar una cola de primero en entrar, primero en salir. La cola debe admitir todas las operaciones admitidas por la cola general (push, pop, peek, empty):

Implemente la clase MyQueue:

void push (int x) Empuja el elemento x hasta el final de la cola
int pop () Elimina del principio de la cola y devuelve el elemento
int peek () Devuelve el elemento al principio de la cola
booleano vacío () Si la cola está vacío, devuelve verdadero; de lo contrario, devuelve falso

Descripción:

Solo puede usar operaciones de pila estándar, es decir, solo las operaciones de empujar hacia arriba, mirar / sacar desde arriba, el tamaño y las operaciones vacías son legales.
Es posible que el idioma que está utilizando no admita pilas. Puede usar list o deque (cola de dos extremos) para simular una pila, siempre que sea una operación de pila estándar.

Avanzado:

¿Puede implementar una cola con O (1) tiempo amortizado para cada operación? En otras palabras, la complejidad de tiempo total de realizar n operaciones es O (n), incluso si una de las operaciones puede llevar mucho tiempo.

Ejemplo:

Entrada:
[“MyQueue”, “push”, “push”, “peek”, “pop”, “empty”]
[[], [1], [2], [], [], []]
Salida:
[nulo, nulo, nulo, 1, 1, falso]

解释 :
MyQueue myQueue = new MyQueue ();
myQueue.push (1); // la cola es: [1]
myQueue.push (2); // la cola es: [1, 2] (el más a la izquierda está al frente de la cola)
myQueue.peek (); // devuelve 1
myQueue.pop (); // devuelve 1, la cola es [2]
myQueue.empty (); // falso retorno

inmediato:

1 <= x <= 9
Llamar push, pop, peek y vaciar hasta 100 veces,
asumiendo que todas las operaciones son válidas (por ejemplo, una cola vacía no llamará operaciones pop o peek)

代码:
private Stack<Integer> queue1;
	private Stack<Integer> queue2;
    public MyQueue() {
    
    
         queue1=new Stack<>();
         queue2=new Stack<>();
    }
    public void push(int x) {
    
    
          queue1.push(x);
    }
    
    public int pop() {
    
    
    	stackTranqueue();
    	int x=queue2.pop();
    	while(!queue2.empty()) {
    
    
   		 queue1.push( queue2.pop());
   	    }
		return x;

    }
    public int peek() {
    
    
    	stackTranqueue();
    	int x=queue2.pop();
    	queue1.push(x);
    	while(!queue2.empty()) {
    
    
   		 queue1.push( queue2.pop());
   	    }
		return x;

    }
    public boolean empty() {
    
    
		return queue1.empty();

    }
    //栈queue1转化成queue2
    public void stackTranqueue() {
    
     
    	 while(!queue1.empty()) {
    
    
    		 queue2.push( queue1.pop());
    	 }
    }

Supongo que te gusta

Origin blog.csdn.net/qq_44461217/article/details/114383187
Recomendado
Clasificación