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ção | Descrição | Exemplo em C++ padrão |
|---|---|---|
| push | Insere elemento no final da fila | fila.push(valor); |
| pop | Remove elemento da frente da fila | fila.pop(); |
| front | Consulta o elemento da frente | fila.front(); |
| size | Retorna o número de elementos | fila.size(); |
| empty | Verifica se a fila está vazia | fila.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.
