Computação Múltipla Escolha

A política de acesso de uma Fila FIFO (First-In, First-Out). Ao implementar uma fila dinâmica baseada em lista simplesmente encadeada, é imperativo manter a eficiência O(1) tanto no enfileiramento (enqueue) quanto no desenfileiramento (dequeue). Para que isso seja possível, quais apontadores o Tipo Abstrato de Dados (TAD) da fila deve manter atualizados?

A política de acesso de uma Fila FIFO (First-In, First-Out). Ao implementar uma fila dinâmica baseada em lista simplesmente encadeada, é imperativo manter a eficiência O(1) tanto no enfileiramento (enqueue) quanto no desenfileiramento (dequeue). Para que isso seja possível, quais apontadores o Tipo Abstrato de Dados (TAD) da fila deve manter atualizados?

  1. Um ponteiro iterador que fica no meio da fila para balanceamento.
  2. Apenas um ponteiro para a cauda (fim).
  3. A estrutura não consegue atingir O(1) para ambas as operações simultaneamente; uma será sempre O(n).
  4. Um ponteiro para a cabeça (início) e outro para a cauda (fim).
  5. Apenas um ponteiro para a cabeça (início).

Resolução completa

Explicação passo a passo

D
Alternativa D

Alternativa D

Introdução à Questão

Esta questão aborda a implementação eficiente de uma Fila (Estrutura de Dados Linear) utilizando uma Lista Simplesmente Encadeada. O objetivo principal é entender quais referências (ponteiros) são necessárias para garantir que as operações básicas tenham complexidade constante, ou seja, O(1).

Análise da Estrutura de Dados

Uma fila segue o princípio FIFO (First-In, First-Out), o que significa:

  • Inserção (Enfileiramento): Ocorre sempre na extremidade posterior (Cauda/Fim).
  • Remoção (Desenfileiramento): Ocorre sempre na extremidade anterior (Cabeça/Início).

Em uma lista simplesmente encadeada, cada nó aponta apenas para o próximo. Não há referência ao anterior. Para atingir eficiência máxima nas duas pontas simultaneamente, precisamos saber exatamente onde elas estão sem precisar percorrer a estrutura.

OperaçãoOnde ocorre na FilaComplexidade IdealRequisito do Ponteiro
EnfileiramentoFinal da listaO(1)Acesso direto ao último nó (Cauda)
DesenfileiramentoInício da listaO(1)Acesso direto ao primeiro nó (Cabeça)

Por que as outras alternativas estão incorretas?

  • Alternativa A (Ponteiro iterador no meio): Um ponteiro intermediário não ajuda a acessar as extremidades da lista rapidamente, pois a inserção e remoção dependem das pontas. Isso seria inútil para otimizar a fila.
  • Alternativa B (Apenas ponteiro para a cauda): Se tivermos apenas a cauda, podemos inserir em O(1). Porém, para remover (desenfileirar), precisaríamos encontrar o início da lista. Em uma lista linear simples, isso exigiria percorrer toda a lista até o final para depois buscar o começo (ou manter um ciclo), resultando em O(n) ou lógica complicada.
  • Alternativa C (Impossível): É possível sim. Embora em uma lista linear com apenas um ponteiro seja impossível, com dois ponteiros (cabeça e cauda) torna-se perfeitamente viável.
  • Alternativa E (Apenas ponteiro para a cabeça): Com apenas a cabeça, conseguimos remover em O(1). Porém, para inserir no final, teríamos que percorrer a lista inteira até encontrar o nó cujo next é nulo, resultando em complexidade O(n).

Conclusão

Para manter a eficiência O(1) tanto na inserção quanto na remoção em uma lista simplesmente encadeada usada como fila, é imperativo manter dois ponteiros: um apontando para o início da lista e outro apontando para o final. Isso permite acesso imediato às duas extremidades necessárias para a operação FIFO.

Portanto, a alternativa correta é a D.

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.