Bem-vindo ao meu repositório de estudos de estrutura de dados! Aqui, compartilho os meus aprendizados e práticas relacionados a estruturas de dados, um aspecto fundamental da programação e ciência da computação.
- Entenda variáveis, tipos primitivos (inteiros, floats, booleanos, etc.) e como eles são armazenados.
- Aprenda sobre
arrays
e listas, estruturas que armazenam elementos de forma sequencial.
- Compreenda as filas (queues) e pilhas (stacks) e suas operações (enqueue, dequeue, push, pop).
- Explore listas ligadas simples e duplamente ligadas, compreendendo suas características e operações.
- Introdução às árvores binárias, suas propriedades e operações.
- Compreenda a recursividade, que é fundamental para muitas estruturas e algoritmos.
- Entenda árvores binárias de busca e suas propriedades.
- Aprenda sobre
heaps
(binários, binomiais, Fibonacci) e suas operações (inserir, extrair mínimo/máximo).
- Introdução a tabelas
hash
, colisões e resoluções de colisões.
- Explore a teoria dos grafos, representações (matriz de adjacência, lista de adjacência) e algoritmos (DFS, BFS).
- Compreenda algoritmos de ordenação (
Bubble Sort, Insertion Sort, Merge Sort, Quick Sort
).
- Aprenda algoritmos de busca (linear, binária) e suas complexidades.
- Estude árvores
AVL
para garantir balanceamento e árvores B para armazenamento eficiente em disco.
- Explore grafos ponderados, algoritmos de caminho mínimo (Dijkstra, Bellman-Ford) e árvores de abrangência mínima (Prim, Kruskal).
- Outras estruturas como Trie, Grafo Direcionado Acíclico (DAG), Union-Find.
- Algoritmos mais complexos como algoritmos de fluxo máximo (Ford-Fulkerson, Edmonds-Karp) e algoritmos de casamento estável.
- São estruturas de dados probabilísticas usadas para testar se um elemento pertence a um conjunto, com um pequeno risco de falsos positivos.
- Especialmente úteis para cálculos de prefixos e atualizações eficientes em sequências de números.
- Abordagem mais avançada das tabelas hash que pode lidar com
resizing
e colisões de maneira mais eficiente.
- Estruturas eficientes para resolver problemas relacionados a intervalos em um conjunto de dados, como consultas de soma em um intervalo específico.
- Uma variação de heap que oferece tempos de execução melhores em certos casos do que outras estruturas de heap.
- Estruturas de dados espaciais usadas em gráficos computacionais e problemas relacionados a espaço tridimensional.
- Estruturas de dados que mantêm versões antigas de si mesmas, o que é útil em situações onde você precisa rastrear alterações ao longo do tempo.
- Incluem estruturas como skip lists e treaps que oferecem eficiência em tempo médio, muitas vezes com complexidade de implementação menor do que estruturas determinísticas equivalentes.
- Estruturas de dados usadas em bancos de dados e sistemas de arquivos para armazenamento eficiente em disco.
- Uma abordagem de hashing alternativa para evitar colisões, usando múltiplas funções de hash.
Os estudos e implementações são realizados em diversas linguagens, incluindo:
- Java
- C
Apesar de utilizar essas duas linguagens, o objetivo não é fazer todos os tópicos em C e em Java, pois muitos exemplos, como as pilhas e filas, são bem parecidos em questão de sintaxe, mudando poucos detalhes. As linguagens escolhidas são apenas para exemplificar e não repassar o mesmo conteúdo em ambas para evitar repetição. Apenas tópicos que são diferentes em ambas linguagens foram estudados utilizando as duas, como vetores e matrizes, que em Java temos uma abordagem diferente usando classes invólucros.
Sinta-se à vontade para contribuir com novos exemplos, correções ou sugestões. Basta seguir estas etapas:
- Faça um fork do repositório.
- Crie uma branch para a sua contribuição (
git checkout -b sua-feature
). - Faça suas alterações e commit (
git commit -m 'Adiciona nova feature'
). - Faça push para a branch (
git push origin sua-feature
). - Abra um pull request para revisão.
Este repositório é destinado a compartilhar conhecimento e práticas sobre estruturas de dados. Sinta-se à vontade para explorar, aprender e contribuir!