Analise os códigos a seguir:Código 01import java.util.Stack;...

Próximas questões
Com base no mesmo assunto
Q4197635 Algoritmos e Estrutura de Dados
Analise os códigos a seguir:
Código 01 import java.util.Stack; public class Pilha {  public static void main(String[] args) {  Stack<Integer> pilha = new Stack<>();  pilha.push(5);  pilha.push(3);  pilha.push(8);  pilha.push(1);  Stack<Integer> pilhaOrdenada = new Stack<>();  while (!pilha.isEmpty()) {  int temp = pilha.pop();  while (!pilhaOrdenada.isEmpty() && temp > pilhaOrdenada.peek()) {  pilha.push(pilhaOrdenada.pop());  }  pilhaOrdenada.push(temp);  }  System.out.println("Pilha Ordenada: " + pilhaOrdenada);  } }
Código 02
import java.util.Stack; public class Pilha {  public static void main(String[] args) {  Stack<Integer> pilha = new Stack<>();  pilha.push(5);  pilha.push(3);  pilha.push(8);  pilha.push(1);  Stack<Integer> pilhaOrdenada = new Stack<>();  while (!pilha.isEmpty()) {  int temp = pilha.pop();  while (!pilhaOrdenada.isEmpty() && temp < pilhaOrdenada.peek()) {  pilha.push(pilhaOrdenada.pop());  }  pilhaOrdenada.push(temp);  }  System.out.println("Pilha Ordenada: " + pilhaOrdenada);  } }

Ao comparar os dois códigos apresentados, assinale a alternativa correta.
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: B

Fundamento decisivo: A troca entre `>` e `<` no laço interno define o sentido do reposicionamento dos elementos e, por consequência, a ordem final da pilha auxiliar.

Tema central: Ordenação com pilhas
Análise das alternativas
A
Errada
Está errada porque inverte os resultados reais. Pela comparação das condições internas e pelo estado final da pilha auxiliar, o Código 01 produz `[1, 3, 5, 8]` e o Código 02 produz `[8, 5, 3, 1]`, não o contrário.
B
Certa
A alternativa B está certa porque descreve exatamente o efeito das condições de comparação no algoritmo com duas pilhas. No Código 01, a condição `temp > pilhaOrdenada.peek()` faz o algoritmo retirar do topo da pilha auxiliar os elementos menores antes de inserir `temp`, e a pilha resultante fica em ordem crescente da base para o topo, sendo impressa como `[1, 3, 5, 8]`. No Código 02, a condição `temp < pilhaOrdenada.peek()` faz o algoritmo retirar os elementos maiores do topo antes de inserir `temp`, e a pilha resultante fica em ordem decrescente da base para o topo, sendo impressa como `[8, 5, 3, 1]`. Como a questão compara o sentido da ordenação final, a resposta é: Exemplo 1 crescente e Exemplo 2 decrescente.
C
Errada
Está errada porque só o Código 01 termina com a pilha em ordem crescente. No Código 02, o resultado final é `[8, 5, 3, 1]`, que é decrescente.
D
Errada
Está errada porque só o Código 02 termina com a pilha em ordem decrescente. No Código 01, o resultado final é `[1, 3, 5, 8]`, que é crescente.
Pegadinha da questão
A confusão real era tomar a ordem de desempilhamento como se fosse a ordem pedida, ou ignorar que o `println` da `Stack` mostra a estrutura final da base para o topo; além disso, a simples troca de `>` por `<` inverte o critério de reposicionamento.
Dica para questões semelhantes
  • Em algoritmos com pilha auxiliar, observe a condição do laço interno: ela define quais elementos saem do topo antes da inserção do atual.
  • Quando a questão perguntar a ordem final, confira a estrutura resultante impressa, não apenas a sequência de `pop` durante a execução.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo