Matemática Múltipla Escolha

Em uma implementação de fila circular que utiliza um array de tamanho MAX, qual das seguintes expressões é a forma correta e mais eficiente para atualizar o índice fim após uma inserção, garantindo o reaproveitamento de espaço?

Em uma implementação de fila circular que utiliza um array de tamanho MAX, qual das seguintes expressões é a forma correta e mais eficiente para atualizar o índice fim após uma inserção, garantindo o reaproveitamento de espaço?

  1. fim = fim + 1;
  2. if (fim == MAX - 1) fim = 0; else fim = fim + 1;
  3. fim = fim - 1;
  4. fim = ((fim + 1) % MAX);
  5. fim = ((fim % MAX) + 1);

Resolução completa

Explicação passo a passo

D
Alternativa D

Alternativa D - fim = (fim + 1) % MAX;

Introdução à Fila Circular

Uma fila circular é uma estrutura de dados onde o último elemento está conectado ao primeiro, formando um ciclo. Em implementações baseadas em arrays, isso permite reutilizar espaços vazios que foram liberados por remoções de elementos.

Para que a fila funcione corretamente sem estourar os limites do array, precisamos de uma lógica que faça o ponteiro de controle ("fim") retornar automaticamente ao índice 0 quando chegar ao final do vetor.

Análise da Expressão Matemática

A expressão correta deve garantir dois comportamentos principais:

  1. Avançar o índice em 1 posição para a próxima inserção.
  2. "Voltar" para o início (índice 0) caso o avanço ultrapasse o tamanho máximo (MAX).

A operação matemática ideal para esse comportamento cíclico é o operador módulo (%).

Vamos analisar a fórmula da alternativa D:

\text{novo\_fim} = (\text{atual\_fim} + 1) \% \text{MAX}

Esta fórmula funciona da seguinte maneira:

  • Se fim estiver no meio do array (ex: fim = 5 e MAX = 10):
  • (5 + 1) \% 10 = 6 (avança normalmente).
  • Se fim estiver no último índice válido (ex: fim = 9 e MAX = 10):
  • (9 + 1) \% 10 = 10 \% 10 = 0 (reinicia no início).

Comparativo com as Outras Alternativas

AlternativaAnálise
Afim = fim + 1; → Falha ao atingir o limite do array (Fila Linear).
Bif (...) ... else ... → Funciona logicamente, mas é menos eficiente que o módulo devido à verificação condicional.
Cfim = fim - 1; → Retrocede o índice, impossível para inserção.
DCorreta. Usa módulo para garantir o loop automático.
Efim = (fim % MAX) + 1; → Pode resultar em um índice igual a MAX (inválido).

A alternativa D é considerada a mais eficiente pois substitui uma estrutura condicional complexa (if/else) por uma única operação aritmética.

Alternativa D.

Tem outra questão para resolver?

Resolver agora com IA

Mais questões de Matemática

Ver mais Matemática resolvidas

Tem outra questão de Matemática?

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