Filas (queues)

Uma fila (queue) é uma estrutura de dados do tipo FIFO (First-In, First-Out), onde o primeiro elemento inserido é o primeiro a ser removido. Em C++, pode-se implementar filas de forma simples usando a biblioteca padrão (std::queue) ou manualmente com ponteiros e listas encadeadas.

1. Implementação com a biblioteca padrão (std::queue)

Inclua o cabeçalho <queue>:

#include <iostream>
#include <queue>
using namespace std;

int main() {
queue<int> fila;

// Inserir elementos (enqueue)
fila.push(10);
fila.push(20);
fila.push(30);

// Aceder o elemento da frente
cout << "Frente da fila: " << fila.front() << endl;

// Remover elementos (dequeue)
fila.pop();
cout << "Nova frente: " << fila.front() << endl;

// Tamanho da fila
cout << "Tamanho da fila: " << fila.size() << endl;

// Esvaziar a fila
while (!fila.empty()) {
cout << "Removendo: " << fila.front() << endl;
fila.pop();
}

return 0;
}

Métodos principais: push (insere no final), pop (remove da frente), front (acede o primeiro), size (tamanho), empty (verifica se está vazia).

2. Implementação manual com lista encadeada

Exemplo básico de fila dinâmica:

#include <iostream>
using namespace std;

struct No {
int valor;
No* prox;
};

struct Fila {
No* inicio;
No* fim;
int tamanho;

Fila() : inicio(nullptr), fim(nullptr), tamanho(0) {}

void enfileira(int v) {
No* novo = new No{v, nullptr};
if (fim) fim->prox = novo;
else inicio = novo;
fim = novo;
tamanho++;
}

void desenfileira() {
if (inicio) {
No* temp = inicio;
inicio = inicio->prox;
delete temp;
tamanho--;
if (!inicio) fim = nullptr;
}
}

int frente() {
if (inicio) return inicio->valor;
throw "Fila vazia!";
}

bool vazia() { return inicio == nullptr; }
};

int main() {
Fila fila;
fila.enfileira(5);
fila.enfileira(10);
fila.enfileira(15);

cout << "Frente: " << fila.frente() << endl;
fila.desenfileira();
cout << "Nova frente: " << fila.frente() << endl;

while (!fila.vazia()) {
cout << "Remover: " << fila.frente() << endl;
fila.desenfileira();
}

return 0;
}

Essa implementação mostra as operações básicas: inserir (enfileirar), remover (desenfileirar), aceder a frente e verificar se está vazia.

3. Principais operações de fila

OperaçãoDescriçãoExemplo em C++ padrão
pushInsere elemento no final da filafila.push(valor);
popRemove elemento da frente da filafila.pop();
frontConsulta o elemento da frentefila.front();
sizeRetorna o número de elementosfila.size();
emptyVerifica se a fila está vaziafila.empty();

Filas são amplamente utilizadas em algoritmos de processamento de tarefas, sistemas de impressão, buffers e muito mais. Use a implementação que melhor se adapta à sua necessidade: para a maioria dos casos, std::queue é suficiente e eficiente.