🗂️ Estrutura de Dados
Fundamentos essenciais para organizar, armazenar e manipular dados de forma eficiente
📌 O que são Estruturas de Dados?
Estruturas de dados são formas de organizar e armazenar dados em um computador para que possam ser usados de maneira eficiente. Cada estrutura tem suas próprias características, vantagens e desvantagens.
📊 Complexidade de Tempo (Big O)
- O(1) – Constante: acesso direto por índice
- O(log n) – Logarítmica: busca binária
- O(n) – Linear: percorrer todos os elementos
- O(n²) – Quadrática: loops aninhados
📋 1. Array (Vetor)
Coleção ordenada de elementos acessíveis por índice. É a estrutura mais básica e amplamente utilizada.
🔗 2. Lista Ligada (Linked List)
Sequência de nós onde cada nó contém um valor e uma referência para o próximo nó.
🥞 3. Pilha (Stack) - LIFO
Estrutura Last-In-First-Out: o último elemento inserido é o primeiro a ser removido.
📬 4. Fila (Queue) - FIFO
Estrutura First-In-First-Out: o primeiro elemento inserido é o primeiro a ser removido.
🗺️ 5. Dicionário / HashMap
Estrutura que armazena pares chave-valor. Busca por chave é O(1) em média.
🌲 6. Conjunto (Set)
Coleção de valores únicos, sem duplicatas. Baseado em hash.
📊 Tabela de Complexidade
| Estrutura | Acesso | Busca | Inserção | Remoção |
|---|---|---|---|---|
| Array | O(1) | O(n) | O(n) | O(n) |
| Lista Ligada | O(n) | O(n) | O(1)* | O(1)* |
| Pilha | O(n) | O(n) | O(1) | O(1) |
| Fila | O(n) | O(n) | O(1) | O(1) |
| HashMap/Map | O(1) | O(1) | O(1) | O(1) |
| Set | O(1) | O(1) | O(1) | O(1) |
📝 Exercícios de Fixação
Implemente uma função que inverta os elementos de um array sem usar o método reverse().
Usando Set, remova elementos duplicados de um array.
Use uma pilha para verificar se os parênteses em uma expressão estão balanceados.
Dado um array de strings, conte quantas vezes cada string aparece usando Map.
Implemente uma fila de atendimento com operações de entrar na fila e chamar próximo.
✅ Boas Práticas
- ✔️ Escolha a estrutura adequada para a operação mais frequente
- ✔️ Considere a complexidade de tempo e espaço
- ✔️ Use Map/Set em vez de Object para chaves dinâmicas
- ✔️ Arrays são ótimos para acesso indexado, ruins para inserção no início
- ✔️ Pilhas e filas resolvem problemas específicos de ordem
📚 Referências e Prática
- 📖 "Entendendo Algoritmos" – Aditya Bhargava
- 📖 "Estruturas de Dados e Algoritmos com JavaScript" – Loiane Groner
- 💻 LeetCode – problemas de estrutura de dados
- 💻 HackerRank – prática estruturada
- 💻 Codewars – desafios diários
🚀 Aplicações Práticas
- Arrays: listas de dados, resultados de API
- Pilhas: undo/redo, navegação de histórico
- Filas: processamento assíncrono, filas de mensagens
- Map/Dicionário: caches, configurações, agrupamentos
- Set: conjuntos únicos, interseções, tags
Post a Comment