Skip to content

Instantly share code, notes, and snippets.

@alberane
Last active February 20, 2026 22:27
Show Gist options
  • Select an option

  • Save alberane/a7f588860e431907eb0daa80b8eec9b1 to your computer and use it in GitHub Desktop.

Select an option

Save alberane/a7f588860e431907eb0daa80b8eec9b1 to your computer and use it in GitHub Desktop.
Filas - C e Python.md

(conteúdo gerado por LLMs)

Uma fila (ou Queue) é uma estrutura de dados fundamental que segue o princípio FIFO (First-In, First-Out), ou seja: o primeiro a entrar é o primeiro a sair. Pense em uma fila de banco real.

Em Python, embora possamos usar listas comuns, a maneira mais eficiente e profissional de implementar uma fila é utilizando a classe deque do módulo collections.


Exemplo Prático: Fila de Atendimento

Neste exemplo, vamos simular a entrada de clientes e o processamento de cada um.

from collections import deque

# 1. Criando a fila
fila_atendimento = deque()

# 2. Adicionando elementos (Enqueue)
print("--- Chegada de Clientes ---")
fila_atendimento.append("Ana")
fila_atendimento.append("Bruno")
fila_atendimento.append("Carla")
print(f"Fila atual: {list(fila_atendimento)}")

# 3. Removendo elementos (Dequeue)
print("\n--- Iniciando Atendimento ---")
while fila_atendimento:
    cliente_atual = fila_atendimento.popleft() # Remove do início da fila
    print(f"Atendendo: {cliente_atual}")
    print(f"Restam na fila: {list(fila_atendimento)}")

print("\nTodos os clientes foram atendidos!")

Por que usar deque em vez de list?

Embora você possa usar list.pop(0) para remover o primeiro item de uma lista, isso é lento em termos computacionais.

  • Listas: Remover o primeiro elemento obriga o Python a deslocar todos os outros itens uma posição para a esquerda. Complexidade: .
  • Deque: Foi desenhado para permitir adições e remoções rápidas em ambas as extremidades. Complexidade: .

Principais Operações

Operação Método Descrição
Inserir append(item) Adiciona um item ao final da fila.
Remover popleft() Remove e retorna o item no início da fila.
Espiar fila[0] Olha quem é o próximo sem removê-lo.
Tamanho len(fila) Retorna quantos itens estão na fila.

Em C, a implementação de uma fila é um pouco mais manual do que em Python, pois não temos uma estrutura pronta de alto nível. Geralmente, usamos Arrays (para tamanhos fixos) ou Listas Encadeadas (para tamanhos dinâmicos).

Para fins didáticos, vamos usar um Array com dois índices: um para o inicio e outro para o fim.


Exemplo: Fila de Atendimento com Array

#include <stdio.h>
#include <stdbool.h>

#define TAMANHO 5

// Estrutura da Fila
typedef struct {
    int itens[TAMANHO];
    int inicio;
    int fim;
} Fila;

// Função para inicializar a fila
void inicializar(Fila *f) {
    f->inicio = 0;
    f->fim = 0;
}

// Verifica se a fila está cheia
bool estaCheia(Fila *f) {
    return f->fim == TAMANHO;
}

// Verifica se a fila está vazia
bool estaVazia(Fila *f) {
    return f->inicio == f->fim;
}

// Adiciona um elemento (Enqueue)
void enfileirar(Fila *f, int valor) {
    if (estaCheia(f)) {
        printf("Erro: A fila está cheia!\n");
    } else {
        f->itens[f->fim] = valor;
        f->fim++;
        printf("Senha %d entrou na fila.\n", valor);
    }
}

// Remove um elemento (Dequeue)
int desenfileirar(Fila *f) {
    if (estaVazia(f)) {
        printf("Erro: A fila está vazia!\n");
        return -1;
    } else {
        int valor = f->itens[f->inicio];
        f->inicio++;
        return valor;
    }
}

int main() {
    Fila minhaFila;
    inicializar(&minhaFila);

    // Adicionando clientes (representados por números de senha)
    enfileirar(&minhaFila, 101);
    enfileirar(&minhaFila, 102);
    enfileirar(&minhaFila, 103);

    printf("\n--- Processando Atendimento ---\n");

    while (!estaVazia(&minhaFila)) {
        int atendido = desenfileirar(&minhaFila);
        printf("Atendendo senha: %d\n", atendido);
    }

    return 0;
}

Diferenças Importantes entre Python e C

Ao migrar de Python para C, note estas particularidades:

  1. Gerenciamento de Memória: Em Python, a fila cresce conforme necessário. Em C (usando arrays), você precisa definir o TAMANHO máximo de antemão ou gerenciar memória manualmente com malloc.
  2. Acesso Direto: Em C, usamos ponteiros (Fila *f) para modificar a estrutura original dentro das funções.
  3. Desperdício de Espaço: No exemplo acima, conforme removemos itens, o espaço no início do array fica "inutilizado". Em sistemas reais, usamos uma Fila Circular para reaproveitar esses espaços.

Resumo dos Conceitos

  • inicio: Aponta para o próximo elemento a ser removido.
  • fim: Aponta para a próxima posição livre para inserção.
  • Complexidade: Ambas as operações de inserir e remover neste exemplo são , o que é excelente para performance.

Você gostaria que eu mostrasse como transformar esse exemplo em uma Fila Circular para que ela nunca "acabe" conforme você remove itens?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment