Ajuda sobre questão de prova - pilhas

6 respostas
D

Tenho uma questão que não estou entendendo.
Observe o seguinte trecho de código em Java.

import java.util.Stack;

public class MyStack extends Stack {
    public void push(int i){
        super.push(new Integer(i));
    }

    public static void main (String[] args){
    MyStack stack = new MyStack();

   int item1 = 1;
   int item2 = 0;
   int item3 =4;
   stack.push(item2);
   stack.push(item1);
   stack.push(item1 + item3);
   item2 = ((Integer)stack.peek()).intValue();
   stack.push(item3 * item3);
   stack.push(3);
   item1 = ((Integer)stack.peek()).intValue();
   while (!stack.isEmpty()){
        item1 = ((Integer)stack.peek()).intValue();
        stack.pop();
        System.out.println(item1);
   }
 }
}

A classe Stack, pertencente ao pacote java.util, implmenta uma estrutura do tipo LIFO (última a entrar, primeira a sair) e fornece as operações usuais push() e pop(). A classe disponibiliza ainda a operação peek() que retorna o elemento no topo da pilha sem removê-lo. A sequência de valores impressa pelo programa é:
[color=red]a) 5, 16, 1
b) 4, 16, 4, 0, 1
c) 5, 8, 5, 1,0
d) 5, 16, 5, 1, 0
e) 4, 0 4, 4 , 1
Resposta: d[/color]
Não entendi a resolução da questão.
Começa entrando nesta órdem: 015, a variável item2 recebe o valor do topo da pilha, depois entra no topo 16: (item3 * item3), na linha seguinte era para entrar 0, stack.push(item2), então porque entra 5 como está na órdem na resposta letra d?
Como resolver?
Obrigado

6 Respostas

ViniGodoy
int item1 = 1;
int item2 = 0;
int item3 =4;

stack.push(item2); //Pilha: 0
stack.push(item1); //Pilha: 0 1
stack.push(item1 + item3); //Pilha: 0 1 5
item2 = ((Integer)stack.peek()).intValue();  //Item2 = 5
stack.push(item3 * item3); //Pilha: 0 1 5 16
stack.push(item2); //Pilha: 0 1 5 16 5
stack.push(3); //Pilha: 0 1 5 16 5 3
item1 = ((Integer)stack.peek()).intValue(); //Item1 = 3
while (!stack.isEmpty()){
   item1 = ((Integer)stack.peek()).intValue();
   stack.pop();
   System.out.println(item1);
}

Saída: 3 5 16 5 1 0

Ou seja, não é nenhuma das respostas. Tem certeza que não engoliu também um pop?

ViniGodoy

Ah, sempre que for postar código, por favor, use a tag code, não a tag color. Fica mais difícil para nós entender o exercício sem identação!

D

Engoli, stack.push(item2);, fica entre (item3 * item3) e stack.push(3)

stack.push(item3 * item3);

stack.push(item2);

stack.push(3);

.

.

.
A

como se trata de

LIFO (última a entrar, primeira a sair)

Leia seu código de baixo pra cima

stack.push(3);
stack.push(item3 * item3);//16
stack.push(item1 + item3);//5
stack.push(item1);//1
stack.push(item2);//0

Saída: 3, 16, 5, 1, 0

ViniGodoy

Corrigi a explicação ali em cima.

D

Entendi, a variável item2 não teve o seu valor alterado, ela continua e insere uma nova posição item2 e depois entra com mais um novo elemente que é 3.

Criado 29 de dezembro de 2009
Ultima resposta 29 de dez. de 2009
Respostas 6
Participantes 3