Uma fila é uma estrutura de dados que admite duas operações: entrarNaFila e sairDaFila. A operação entrarNaFila adiciona um novo elemento no final da fila. A operação sairDaFila retira o elemento que está no início da fila. Implementar uma fila como um vetor de valores inteiros e escrever as funções void entrarNaFila(int ^* n, int *f, int x ), que inclui o valor x na fila f de n elementos, e int sairDaFila(int *n, int *f) que retira um elemento da fila f de n elementos. Escrever a função main() para alocar o vetor com um tamanho máximo, definido pelo usuário, e para testar as funções entrarNaFila e sairDaFila, mostrando a cada operação, o conteúdo da fila.

Passo 1

Vamos começar resumindo o que o exercício pede: implementar uma fila (FIFO) usando um vetor de inteiros em C, com duas operações—entrarNaFila (enqueue) e sairDaFila (dequeue)—e depois escrever uma função main() que aloque dinamicamente o vetor de tamanho máximo definido pelo usuário, teste essas operações e mostre o conteúdo da fila após cada ação.

Passo 2

Para implementar entrarNaFila, a teoria diz que enfileirar é inserir o novo elemento no final da fila. Como estamos usando um vetor e guardamos o número de elementos em *n, basta fazer f[*n] = x e incrementar *n. Em C fica assim:
A operação sairDaFila retira o elemento que está no início da fila. Primeiro guardamos f[0], depois deslocamos todos os elementos subsequentes uma posição à frente (índice i passa para i-1) e decrementamos *n. Por fim retornamos o valor removido.

Passo 3

Para facilitar a visualização, criamos uma função imprimirFila que recebe n e o vetor f, verifica se está vazia e, caso não, percorre os elementos de 0 a n-1 imprimindo cada um.

Passo 4

Na função main(), pedimos ao usuário o tamanho máximo da fila, fazemos malloc para criar o vetor, inicializamos n=0 e entramos em um laço interativo (menu) que permite chamar entrarNaFila ou sairDaFila, sempre imprimindo o estado atual da fila. Ao final, liberamos a memória e encerramos o programa.

Resposta

#include <stdio.h>
#include <stdlib.h>
void entrarNaFila(int *n, int *f, int x) {
f[*n] = x;
(*n)++;
}
int sairDaFila(int *n, int *f) {
if (*n == 0) {
printf(“Fila vazia!\n”);
return -1;
}
int removido = f[0];
for (int i = 1; i < *n; i++) {
f[i - 1] = f[i];
}
(*n)–;
return removido;
}
void imprimirFila(int n, int *f) {
if (n == 0) {
printf(“Fila vazia\n”);
return;
}
printf(“Fila atual: “);
for (int i = 0; i < n; i++) {
printf(”%d “, f[i]);
}
printf(”\n”);
}
int main() {
int max;
printf(“Digite o tamanho maximo da fila: “);
scanf(”%d”, &max);
int *fila = malloc(max * sizeof(int));
if (fila == NULL) {
    printf("Erro de alocacao\n");
    return 1;
}

int n = 0;
int opcao, x;

do {
    printf("\nEscolha uma operacao: 1-Entrar, 2-Sair, 0-Sair do programa: ");
    scanf("%d", &opcao);
    switch (opcao) {
        case 1:
            if (n == max) {
                printf("Fila cheia!\n");
            } else {
                printf("Digite o valor para entrar na fila: ");
                scanf("%d", &x);
                entrarNaFila(&n, fila, x);
                imprimirFila(n, fila);
            }
            break;
        case 2:
            x = sairDaFila(&n, fila);
            if (x != -1) {
                printf("Elemento removido: %d\n", x);
                imprimirFila(n, fila);
            }
            break;
        case 0:
            printf("Encerrando programa.\n");
            break;
        default:
            printf("Opcao invalida!\n");
    }
} while (opcao != 0);

free(fila);
return 0;
}

Exercícios relacionados