FIFO — First In, First Out
Fila: entrada no back, saída no front
A fila é um tipo abstrato no qual somente o elemento inserido há mais tempo pode ser removido.
Contrato da fila
- enqueue(valor) adiciona um elemento no back/tail.
- dequeue() remove e retorna o elemento do front/head.
- front() consulta o próximo elemento sem removê-lo.
- FIFO preserva a ordem de chegada.
Implementações corretas
Uma fila pode usar um array circular ou uma lista encadeada com referências para as duas pontas.
Remover o primeiro elemento de um std::vector funciona logicamente, mas exige deslocar os demais elementos e custa O(n).
Laboratório: fila simplesmente encadeada
front aponta para a primeira célula e back para a última. Cada célula guarda o endereço da próxima; a última aponta para nullptr.
Enqueue no back e dequeue no front
Operação
Ordem do front ao back
C++: std::queue
deque fornece inserções e remoções nas duas extremidades com desempenho aproximadamente O(1). Para fila, usamos somente o back para entrada e o front para saída.
C++17fila pronta
#include <queue>
std::queue<int> fila;
fila.push(10);
fila.push(20);
int primeiro = fila.front();
fila.pop();
Fila encadeada
Manter front e back permite enqueue e dequeue em O(1), inclusive quando a fila tem muitos elementos.
C++17ligações essenciais
#include <memory>
#include <stdexcept>
class FilaEncadeada {
struct No {
int valor;
std::unique_ptr<No> proximo;
explicit No(int valor) : valor(valor), proximo(nullptr) {}
};
std::unique_ptr<No> inicio;
No* fim = nullptr;
public:
void enqueue(int valor) {
auto novo = std::make_unique<No>(valor);
No* endereco = novo.get();
if (fim) fim->proximo = std::move(novo);
else inicio = std::move(novo);
fim = endereco;
}
int dequeue() {
if (!inicio) throw std::runtime_error("fila vazia");
int valor = inicio->valor;
inicio = std::move(inicio->proximo);
if (!inicio) fim = nullptr;
return valor;
}
};
Referências usadas
- NIST — queue: FIFO, enqueue no tail e dequeue no head.
- cppreference — std::queue: adaptador FIFO e suas operações.
- cppreference — std::deque: operações eficientes nas extremidades.