An open API service indexing awesome lists of open source software.

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.

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!