Questão nº 35

Questão de Tecnologia da Informação · CESGRANRIO CAIXA 1/2021/NM (nº 35)

CESGRANRIO2021Técnico Bancário Novo - Tecnologia da InformaçãoTecnologia da Informação
Gabarito: Bver comentário ↓

Duas pilhas, p1 e p2, foram implementadas em Python, por meio de listas em que o último elemento da lista é o topo da pilha. As configurações iniciais dessas pilhas são as seguintes:

```python
p1=[50,40,30,20,10]
p2=[ ]
```

Qual função irá transferir os elementos de p1 para p2, de modo que p1 passe a ser uma pilha vazia, e p2 passe a ter a mesma configuração que p1 tinha, antes da chamada da função?

Resposta comentada

Gabarito Alternativa B

Conceito-chave: Uma pilha (stack) é uma estrutura LIFO (Last In, First Out): o último elemento que entra é o primeiro que sai. Para transferir os elementos de p1 para p2 mantendo a mesma ordem, você precisa desempilhar cada elemento do topo de p1, guardá-lo temporariamente, e só depois de esvaziar p1 (via recursão ou iteração) empilhá-lo em p2 — assim o primeiro que saiu de p1 (o 10) será o último a entrar em p2, ficando no fundo, e o último que saiu (o 50) ficará no topo.

  • (A) Incorreta: Não remove o elemento de p1 (falta o del), então a recursão nunca termina (loop infinito) e p1 não esvazia.
  • (B) Correta: Remove o topo de p1 com del, chama recursivamente até p1 ficar vazio, e na volta (após a recursão) empilha cada x em p2 — isso inverte a ordem de remoção, resultando em p2=[50,40,30,20,10], exatamente a configuração original de p1.
  • (C) Incorreta: Usa p2.append(p1.pop()) antes da chamada recursiva, então empilha em p2 na ordem de remoção (10,20,30,40,50), deixando p2 invertido ([10,20,30,40,50]).
  • (D) Incorreta: O for i in range(len(p1)) calcula o tamanho inicial (5), mas a cada pop() o len(p1) diminui, então o loop tenta acessar índices inexistentes e para com erro (IndexError) — além de inverter a ordem.
  • (E) Incorreta: Apenas copia os elementos de p1 para p2 sem remover nada de p1 (não usa pop nem del), então p1 continua cheia e p2 fica igual, mas não é uma transferência.

Armadilha do distrator mais tentador (C): A banca coloca p2.append(p1.pop()) antes da recursão, o que parece lógico (tira e coloca), mas isso inverte a ordem — o aluno que não lembra que a recursão deve acontecer antes do append cai na pegadinha, achando que a ordem se mantém, quando na verdade o 10 (topo) vai para o fundo de p2.

Fonte: CESGRANRIO CAIXA 1/2021/NM Técnico Bancário Novo - Tecnologia da Informação. Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho