Computação Múltipla Escolha

Suponha que o método reverse() é definido por: Qual dos seguintes fragmentos deveria substituir <código> para que a pós-condição do referido método fosse satisfeita?

Suponha que o método reverse() é definido por:

1 // Pré-condição: first é uma referência ao primeiro nó de uma
2 // lista de ligação simples (Linear Linked
3 // List).
4 // Pós-condição: Os elementos da lista são impressos na ordem
5 // inversa.
6 template<class T>
7 public void reverse(LNODE<T> first) {
8  <code>
9   cout << first->element << " ";
10  reverse(first->next);
11 }

Qual dos seguintes fragmentos deveria substituir <código> para que a pós-condição do referido método fosse satisfeita?

  1. Apenas I
  2. Apenas II
  3. Apenas III
  4. Apenas I e II
  5. Apenas I e III

Resolução completa

Explicação passo a passo

B
Alternativa B

Alternativa B

O objetivo do método reverse() é imprimir os elementos de uma lista encadeada na ordem inversa. Para resolver, precisamos analisar o comportamento de cada estrutura de dados proposta nos fragmentos de código.

Análise dos Fragmentos

Fragmento I (Recursividade Incompleta)

Este fragmento utiliza recursão, mas a ordem das operações está invertida para o objetivo desejado.

  • Lógica: O código imprime o elemento atual (cout << first->element) antes de chamar a função recursivamente para o próximo nó.
  • Resultado: Isso produz a impressão da lista na ordem normal (cabeça até a cauda).
  • Correção necessária: Para obter a ordem inversa via recursão, a chamada reverse(first->next) deveria ocorrer antes do cout.
  • Veredito: Incorreto.

Fragmento II (Pilha / Stack)

Este fragmento utiliza uma pilha (estrutura LIFO - Last In, First Out).

  • Passo 1: Percorre a lista completa e empurra (push) todos os elementos para a pilha. Se a lista é A \rightarrow B \rightarrow C, a pilha fica com C no topo.
  • Passo 2: Enquanto a pilha não estiver vazia, desempilha (pop) e imprime.
  • Resultado: Como a pilha libera primeiro o último item inserido, a saída será C, B, A.
  • Veredito: Correto.

Fragmento III (Fila / Queue)

Este fragmento utiliza uma fila (estrutura FIFO - First In, First Out).

  • Passo 1: Percorre a lista e enfileira (enqueue) os elementos.
  • Passo 2: Enquanto a fila não estiver vazia, desenfileira (dequeue) e imprime.
  • Resultado: Filas mantêm a ordem de chegada. Se entrou A primeiro, sai A primeiro. A saída será A, B, C.
  • Veredito: Incorreto.

Conclusão

Apenas o Fragmento II garante que os elementos sejam impressos na ordem inversa à original, aproveitando a propriedade de reversão natural da estrutura de pilha.

Portanto, a alternativa correta é a B.

Tem outra questão para resolver?

Resolver agora com IA

Mais questões de Computação

Ver mais Computação resolvidas

Tem outra questão de Computação?

Cole o enunciado, tire uma foto ou descreva o problema — a IA resolve com explicação completa em segundos.