Skip to content

Repository files navigation

Estruturas de Dados e Algoritmos em C

Português | English

CI release license C gcc contributions welcome
issues welcome

Repositório educacional com implementações de estruturas de dados e algoritmos em C, cobrindo estruturas fundamentais e avançadas com exemplos executáveis, testes automatizados, documentação por módulo, exercícios práticos, cobertura de testes e benchmarks.

Dica: a escolha da estrutura de dados certa é tão importante quanto o algoritmo. Cada estrutura tem um conjunto de operações e trade-offs de complexidade distintos.


Estruturas e algoritmos implementados

Módulo Documentação Descrição Complexidade principal
TAD docs/TAD.md Tipo Abstrato de Dados — conceito de interface vs. implementação
Lista docs/Lista.md Lista sequencial dinâmica, versão estática, busca linear/binária e ordenação configurável O(1) fim, O(n) meio
ListaEncadeada docs/ListasEncadeadas.md Lista simplesmente encadeada O(1) início, O(n) busca/remoção
ListaDuplamenteEncadeada docs/ListasEncadeadas.md Lista duplamente encadeada O(1) início/fim, O(n) busca/remoção
Fila docs/Fila.md Fila circular (FIFO) dinâmica e versão estática, ambas com capacidade fixa O(1) enfileirar/desenfileirar
Pilha docs/Pilha.md Pilha sequencial (LIFO) dinâmica e versão estática, ambas com capacidade fixa O(1) empilhar/desempilhar
TabelaHash docs/TabelaHash.md Tabela hash opaca com encadeamento separado O(1) médio, O(n) pior caso
Heap docs/Heap.md Heap máximo dinâmico, fila de prioridade e Heap Sort O(1) consultar raiz, O(log n) inserir/remover
Árvore / Arvore docs/Arvore.md Árvore Binária de Busca (BST) + conceitos AVL/Rubro-Negra O(log n) médio, O(n) pior
AVL docs/AVL.md Árvore AVL com inserção, remoção, rotações e balanceamento automático O(log n) buscar/inserir/remover
Grafo docs/Grafo.md Grafo com matriz de adjacência, pesos positivos, BFS/DFS/Dijkstra e ordenação topológica O(1) consulta de aresta
GrafoListaAdjacencia docs/GrafoListaAdjacencia.md Grafo com lista de adjacência, pesos positivos, BFS/DFS e Dijkstra O(V + E) BFS/DFS
AlgoritmosGrafos docs/AlgoritmosGrafos.md Algoritmos clássicos: Union-Find, Kruskal, Prim, Bellman-Ford e Floyd-Warshall O(E log E), O(VE), O(V³)
Métodos de Ordenação / MetodosOrdenacao docs/MetodosOrdenacao.md Bubble, Insertion, Selection, Merge, Quick e Heap Sort para vetores O(n²) a O(n log n)
Métodos de Busca / MetodosBusca docs/MetodosBusca.md Busca Linear, Binária, por Salto, por Interpolação e Exponencial para vetores O(n) a O(log n)
Custo Computacional e Complexidade docs/CustoComputacional.md Introdução ao custo de tempo/espaço, ordens de crescimento e análise assintótica O(1) a O(2ⁿ)

Status por módulo

Módulo Build Testes Sanitizer Cobertura Benchmark Documentação PT/EN
Lista/Fila/Pilha CI CI Sim
Heap CI CI CI CI Sim
TabelaHash CI CI CI CI CI Sim
ListaEncadeada / ListaDuplamenteEncadeada CI CI CI CI Sim
Árvore / AVL CI CI AVL AVL AVL Sim
Grafo / GrafoListaAdjacencia CI CI GrafoListaAdjacencia GrafoListaAdjacencia Sim
AlgoritmosGrafos CI CI CI CI CI Sim
Busca / Ordenação CI CI Sim

Qualidade técnica

  • AVL usa nó opaco no header público.
  • TabelaHash usa TAD opaco no header público.
  • UnionFind usa TAD opaco no header público de AlgoritmosGrafos.
  • Módulos com alocação validam tamanhos, falhas de alocação e estado destruído antes de usar memória.
  • make coverage gera relatório com gcov para módulos novos e avançados.
  • make benchmark executa benchmark CSV em benchmarks/.
  • Módulos antigos com acentos/espaços têm aliases ASCII: Arvore, MetodosOrdenacao e MetodosBusca.

Pré-requisitos

  • GCC 7 ou superior
  • GNU Make
  • gcov, para cobertura de testes
gcc --version
make --version
gcov --version

Organização do repositório

Caminho Conteúdo
Makefile Alvos globais para build, testes, sanitizers, cobertura, benchmarks e limpeza
Fundamentos/ TAD e conceitos-base
Lineares/ Lista, lista encadeada, lista duplamente encadeada, fila e pilha
Arvores/ BST, alias ASCII e AVL
Grafos/ Matriz de adjacência, lista de adjacência e algoritmos clássicos de grafos
Heaps/ Heap máximo e fila de prioridade
Hash/ Tabela hash
Ordenacao/ Métodos de ordenação e alias ASCII
Busca/ Métodos de busca e alias ASCII
Complexidade/ Explicação introdutória dedicada a custo computacional e Big-O
include/comum/ Helpers compartilhados de segurança de memória e alocação
*/include/ Headers públicos de cada módulo
*/src/ Implementações e exemplos executáveis
*/tests/ Testes automatizados por módulo
docs/ Documentação principal em português
docs/en/ Páginas de referência em inglês
exercicios/ Listas práticas por tema
benchmarks/ Benchmark consolidado em CSV
scripts/ Scripts auxiliares de cobertura

Como usar

Clonar o repositório

git clone https://github.com/tiagofga/Estruturas-de-Dados-e-Algoritmos-em-C.git
cd Estruturas-de-Dados-e-Algoritmos-em-C

Compilar e testar todo o projeto

make
make test
make sanitize
make coverage
make benchmark
make clean

Compilar e executar um módulo

cd Grafos/AlgoritmosGrafos  # ou Hash/TabelaHash, Lineares/ListaEncadeada, Grafos/GrafoListaAdjacencia, Arvores/AVL etc.
make
make run
make test
make clean

Documentação

A pasta docs/ contém a documentação principal em português. A versão em inglês está disponível em docs/en/, com páginas de referência equivalentes ou resumidas conforme o módulo.

Exercícios e roteiro de aulas

Testes automatizados

Os testes do projeto estão organizados nas pastas tests/ de cada módulo implementado. A CI compila e testa todos os módulos com implementação em C, executa sanitizers, gera cobertura e roda benchmarks.


Contribuindo

  1. Faça um fork do repositório.
  2. Crie uma branch descritiva: git checkout -b feat/minha-estrutura.
  3. Implemente seguindo o padrão de estrutura de diretórios acima.
  4. Use nomes ASCII, sem acentos e sem espaços, para novos módulos.
  5. Adicione testes em tests/.
  6. Garanta que make, make test, make sanitize, make coverage e make benchmark passam sem erros, quando aplicável.
  7. Abra um pull request descrevendo as mudanças.

Encontrou um bug ou tem uma sugestão? Abra uma issue!


Licença

Distribuído sob a licença Apache 2.0. Consulte LICENSE para mais informações.

About

Este repositório tem como objetivo divulgar o conteúdo de Estruturas de Dados e Algoritmos em C.

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages