Para implementar o histórico de desfazer e refazer (undo/redo) em um editor, qual estrutura de dados técnica é…
Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva
Descrever com precisão a solução de um problema, construindo o programa que implementa a solução descrita.
Fonte: Base Nacional Comum Curricular (MEC).Questão
Para implementar o histórico de desfazer e refazer (undo/redo) em um editor, qual estrutura de dados técnica é mais apropriada?
- A) Duas pilhas (stack): uma para undo e outra para redo.
- B) Usar um array fixo para registrar as ações.
- C) Implementar com uma única pilha, alternando os estados.
- D) Usar uma lista encadeada para o histórico de ações.
- E) Armazenar ações em um vetor dinâmico.
✅ Resposta correta: alternativa A
Resolução passo a passo
- Undo significa desfazer a ação mais recente, e redo significa refazer uma ação que acabou de ser desfeita. Ambas as operações seguem a lógica do último a entrar, primeiro a sair (LIFO), que é o comportamento de uma pilha.
- Com duas pilhas, a pilha de undo guarda as ações já realizadas. Ao desfazer, a ação é retirada do topo da pilha de undo e empilhada na pilha de redo. Ao refazer, o processo se inverte. Qualquer nova ação do usuário limpa a pilha de redo, o que mantém a consistência do histórico.
- A alternativa B está errada porque um array fixo tem capacidade limitada e não acompanha o crescimento natural do histórico, além de não modelar bem a ordem de desfazer e refazer.
- A alternativa C está errada porque uma única pilha não consegue separar as ações disponíveis para desfazer das disponíveis para refazer sem uma estrutura adicional que guarde o que foi desfeito.
- A alternativa D está errada porque uma lista encadeada até funciona, mas não é a estrutura mais apropriada: exige tratamento manual de ponteiros e não expressa diretamente a disciplina de último a entrar, primeiro a sair.
- A alternativa E está errada porque um vetor dinâmico guardaria as ações, mas sem duas estruturas separadas não haveria uma forma natural de gerenciar o refazer. Por isso a resposta correta é a A, de acordo com o gabarito oficial.
💡 Dica: Considere as estruturas de dados que suportam operações de pilha.
Alternativa por alternativa
Pilhas operam em LIFO, permitindo reverter a última ação com pop e recuperar ações refazendo ao mover operações entre as duas pilhas; cada operação é O(1).
O aluno imagina que um array de tamanho fixo basta para registrar ações, ignorando que o histórico cresce indefinidamente e que a ordem de desfazer e refazer precisa ser controlada.
O aluno acredita que uma única pilha consegue alternar entre os estados de desfazer e refazer apenas trocando o topo, sem perceber que as ações desfeitas precisam ser guardadas em algum lugar separado.
Por que engana: Confundir o uso de uma única pilha para gerenciar as operações de desfazer e refazer, não percebendo que isso pode levar à perda de informações sobre as ações realizadas.
O aluno associa a flexibilidade de inserção da lista encadeada à solução ideal, sem considerar que o padrão LIFO das operações de desfazer e refazer se encaixa melhor em duas pilhas.
O aluno pensa que armazenar as ações em um vetor dinâmico resolve o problema por si só, sem perceber que faltaria a separação entre histórico de desfazer e histórico de refazer.
Raio-X da questão
estruturas de dados
avaliacao
estruturas de dados · pilhas e filas
Revisar conceitos de pilhas e filas em estruturas de dados.
Confundir o uso de uma única pilha para gerenciar as operações de desfazer e refazer, não percebendo que isso pode levar à perda de informações sobre as ações realizadas.
ciencia_tecnologia
tomada_decisao
abstrato
Questões parecidas com resolução
- Projete um algoritmo e descreva as estruturas de dados para implementar operações de desfazer/refazer (undo/redo) em um…
- Em um algoritmo que precisa permitir inserções e remoções frequentes no meio de uma sequência de comandos editáveis…
- Em um projeto de programação, a equipe precisa guardar as tarefas a fazer em uma sequência na qual seja possível incluir…
- Em um algoritmo que armazena uma sequência de comandos editáveis e de tamanho variável para executar uma ação, qual…
- Em um algoritmo de busca em profundidade (DFS) em um grafo que precisa rastrear o caminho atual para detecção de ciclos…
- Ao implementar um algoritmo que verifica se uma expressão com parênteses, colchetes e chaves está balanceada, qual…
🔎 Procurar outra questão
Procure no banco do GeraProva pelo tema ou por um trecho do enunciado. Cada questão já vem com resolução comentada e a análise de cada alternativa.
Professor: monte a prova com questões como esta, com gabarito e folha de respostas, em 30 segundos. Ver planos · Blog
