Faça uma função que receba uma fila como argumento e retorne o valor armazenado em seu início. A função deve remover também esse elemento.
Passo 1
O problema pede uma função que receba uma fila e remova o elemento do início, retornando o valor armazenado nessa posição. O conteúdo envolvido é a operação de “dequeue” em uma fila (fila implementada como lista encadeada), e vamos precisar das referências aos ponteiros front (início) e rear (fim) da fila, além de tratar o caso de underflow (fila vazia).
Passo 2
Para evitar remover de uma fila vazia, primeiro verificamos se o ponteiro front é NULL. Se for, sinalizamos erro (underflow) e interrompemos a execução ou retornamos um código de erro. Esse passo garante que não acessaremos memória inválida.
Passo 3
Para retirar o elemento do início, guardamos em uma variável temporária o nó apontado por front. Em seguida, lemos o valor armazenado nesse nó e atualizamos front para apontar para o próximo nó da lista (temp->next).
Passo 4
Depois de avançar front, se ele passar a ser NULL, significa que a fila ficou vazia. Nesse caso, precisamos atualizar também rear para NULL, mantendo a consistência da estrutura.
Passo 5
Por fim, liberamos a memória do nó removido usando free e retornamos o valor lido anteriormente. Essa sequência completa a operação de dequeue, removendo e retornando o elemento do início da fila.
Resposta
// Definições de tipo
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct Node {
int data;
struct Node *next;
} Node;
typedef struct {
Node *front;
Node *rear;
} Queue;
Node *front;
Node *rear;
} Queue;
int dequeue(Queue *q) {
if (q->front == NULL) {
// Fila vazia
fprintf(stderr, “Underflow: fila vazia\n”);
exit(EXIT_FAILURE);
}
Node *temp = q->front;
int valor = temp->data;
q->front = temp->next;
if (q->front == NULL) {
q->rear = NULL;
}
free(temp);
return valor;
}
if (q->front == NULL) {
// Fila vazia
fprintf(stderr, “Underflow: fila vazia\n”);
exit(EXIT_FAILURE);
}
Node *temp = q->front;
int valor = temp->data;
q->front = temp->next;
if (q->front == NULL) {
q->rear = NULL;
}
free(temp);
return valor;
}