https://github.com/vitorhugoantunes/data_structure_learning
Collection of studies on Data Structure.
https://github.com/vitorhugoantunes/data_structure_learning
algorithms c data-structures java
Last synced: 3 months ago
JSON representation
Collection of studies on Data Structure.
- Host: GitHub
- URL: https://github.com/vitorhugoantunes/data_structure_learning
- Owner: VitorHugoAntunes
- Created: 2023-12-09T20:32:38.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-12-13T21:54:43.000Z (over 1 year ago)
- Last Synced: 2024-12-13T22:29:22.400Z (over 1 year ago)
- Topics: algorithms, c, data-structures, java
- Homepage:
- Size: 1.45 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Estrutura de Dados - Repositório de Estudos
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.
## Conteúdo do Repositório
Estrutura de Dados 1
### 1. Tipos de dados
- Entenda variáveis, tipos primitivos (inteiros, floats, booleanos, etc.) e como eles são armazenados.
### 2. Arrays e listas
- Aprenda sobre `arrays` e listas, estruturas que armazenam elementos de forma sequencial.
### 3. Filas e Pilhas
- Compreenda as filas (queues) e pilhas (stacks) e suas operações (enqueue, dequeue, push, pop).
### 4. Listas ligadas (linked lists)
- Explore listas ligadas simples e duplamente ligadas, compreendendo suas características e operações.
### 5. Árvores
- Introdução às árvores binárias, suas propriedades e operações.
### 6. Recursividade
- Compreenda a recursividade, que é fundamental para muitas estruturas e algoritmos.
### 7. Árvores Binárias de Busca (BST)
- Entenda árvores binárias de busca e suas propriedades.
### 8. Heap
- Aprenda sobre `heaps` (binários, binomiais, Fibonacci) e suas operações (inserir, extrair mínimo/máximo).
### 9. Tabelas Hash
- Introdução a tabelas `hash`, colisões e resoluções de colisões.
### 10. Grafos
- Explore a teoria dos grafos, representações (matriz de adjacência, lista de adjacência) e algoritmos (DFS, BFS).
### 11. Algoritmos de ordenação
- Compreenda algoritmos de ordenação (`Bubble Sort, Insertion Sort, Merge Sort, Quick Sort`).
### 12. Algoritmos de busca
- Aprenda algoritmos de busca (linear, binária) e suas complexidades.
### 13. Árvores AVL e Árvores B
- Estude árvores `AVL` para garantir balanceamento e árvores B para armazenamento eficiente em disco.
### 14. Grafos ponderados
- Explore grafos ponderados, algoritmos de caminho mínimo (Dijkstra, Bellman-Ford) e árvores de abrangência mínima (Prim, Kruskal).
### 15. Estrutura de dados avançadas
- Outras estruturas como Trie, Grafo Direcionado Acíclico (DAG), Union-Find.
### 16. Algoritmos avançados
- Algoritmos mais complexos como algoritmos de fluxo máximo (Ford-Fulkerson, Edmonds-Karp) e algoritmos de casamento estável.
Estrutura de Dados 2
### 1. Filtros de bloom
- São estruturas de dados probabilísticas usadas para testar se um elemento pertence a um conjunto, com um pequeno risco de falsos positivos.
### 2. Árvores de Fenwick (ou BIT - Binary Indexed Tree)
- Especialmente úteis para cálculos de prefixos e atualizações eficientes em sequências de números.
### 3. Tabelas Hash Dinâmicas (Dynamic Hash Tables)
- Abordagem mais avançada das tabelas hash que pode lidar com `resizing` e colisões de maneira mais eficiente.
### 4. Árvores de segmento
- Estruturas eficientes para resolver problemas relacionados a intervalos em um conjunto de dados, como consultas de soma em um intervalo específico.
### 5. Fibonacci Heap
- Uma variação de heap que oferece tempos de execução melhores em certos casos do que outras estruturas de heap.
### 6. Quad Trees e Oct Trees
- Estruturas de dados espaciais usadas em gráficos computacionais e problemas relacionados a espaço tridimensional.
### 7. Estruturas de dados persistente
- 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.
### 8. Estruturas de dados probabilísticas
- 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.
### 9. B-Tree e B+Tree
- Estruturas de dados usadas em bancos de dados e sistemas de arquivos para armazenamento eficiente em disco.
### 10. Cuckoo Hashing
- Uma abordagem de hashing alternativa para evitar colisões, usando múltiplas funções de hash.
## Linguagens Utilizadas
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.
## Como Contribuir
Sinta-se à vontade para contribuir com novos exemplos, correções ou sugestões. Basta seguir estas etapas:
1. Faça um fork do repositório.
2. Crie uma branch para a sua contribuição (`git checkout -b sua-feature`).
3. Faça suas alterações e commit (`git commit -m 'Adiciona nova feature'`).
4. Faça push para a branch (`git push origin sua-feature`).
5. Abra um pull request para revisão.
## Observações
Este repositório é destinado a compartilhar conhecimento e práticas sobre estruturas de dados. Sinta-se à vontade para explorar, aprender e contribuir!