Português | English
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.
| 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ⁿ) |
| 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 |
AVLusa nó opaco no header público.TabelaHashusa TAD opaco no header público.UnionFindusa TAD opaco no header público deAlgoritmosGrafos.- Módulos com alocação validam tamanhos, falhas de alocação e estado destruído antes de usar memória.
make coveragegera relatório comgcovpara módulos novos e avançados.make benchmarkexecuta benchmark CSV embenchmarks/.- Módulos antigos com acentos/espaços têm aliases ASCII:
Arvore,MetodosOrdenacaoeMetodosBusca.
- GCC 7 ou superior
- GNU Make
gcov, para cobertura de testes
gcc --version
make --version
gcov --version| 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 |
git clone https://github.com/tiagofga/Estruturas-de-Dados-e-Algoritmos-em-C.git
cd Estruturas-de-Dados-e-Algoritmos-em-Cmake
make test
make sanitize
make coverage
make benchmark
make cleancd Grafos/AlgoritmosGrafos # ou Hash/TabelaHash, Lineares/ListaEncadeada, Grafos/GrafoListaAdjacencia, Arvores/AVL etc.
make
make run
make test
make cleanA 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.
- TAD — Tipo Abstrato de Dados
- Lista sequencial dinâmica
- Listas encadeadas
- Fila circular
- Pilha sequencial
- Tabela hash
- Heap máximo e fila de prioridade
- Árvore Binária de Busca
- AVL
- Grafo com matriz de adjacência
- Grafo com lista de adjacência
- Algoritmos avançados de grafos
- Benchmarks
- Organização do repositório
- Makefiles e padrão de build
- Aliases ASCII
- Complexidade (Big-O)
- Custo computacional e complexidade
- Métodos de busca para vetores
- Métodos de ordenação para vetores
- Lista/Fila/Pilha estática vs dinâmica
- Segurança de memória e alocação
- Política de nomes de módulos
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.
- Faça um fork do repositório.
- Crie uma branch descritiva:
git checkout -b feat/minha-estrutura. - Implemente seguindo o padrão de estrutura de diretórios acima.
- Use nomes ASCII, sem acentos e sem espaços, para novos módulos.
- Adicione testes em
tests/. - Garanta que
make,make test,make sanitize,make coverageemake benchmarkpassam sem erros, quando aplicável. - Abra um pull request descrevendo as mudanças.
Encontrou um bug ou tem uma sugestão? Abra uma issue!
Distribuído sob a licença Apache 2.0. Consulte LICENSE para mais informações.