
Estruturas de Dados Essenciais: Guia Prático para Entrevistas e Projetos Reais
Todo programa manipula dados. A forma como organizamos esses dados — a estrutura escolhida — determina a eficiência das operações de busca, inserção, remoção e travessia. Estruturas de dados bem escolhidas reduzem complexidade de O(n²) para O(log n) ou até O(1). Este guia cobre as estruturas essenciais que aparecem em projetos reais e entrevistas técnicas.
Arrays e listas encadeadas
Arrays armazenam elementos em blocos contíguos de memória. O acesso por índice é O(1), mas inserções e remoções no meio exigem deslocamento de elementos — O(n). Listas encadeadas (linked lists) usam nós com ponteiros para o próximo elemento. Inserção e remoção são O(1) se o ponteiro for conhecido, mas acesso aleatório requer travessia O(n).
// Lista encadeada simples
class ListNode<T> {
value: T;
next: ListNode<T> | null = null;
constructor(value: T) {
this.value = value;
}
}
// Inserção no início — O(1)
function prepend<T>(head: ListNode<T> | null, value: T): ListNode<T> {
const node = new ListNode(value);
node.next = head;
return node;
}Pilhas (Stacks) e Filas (Queues)
Pilhas seguem o princípio LIFO (Last In, First Out): o último elemento inserido é o primeiro removido. Úteis para desfazer operações, navegação de histórico e avaliação de expressões. Filas seguem FIFO (First In, First Out): o primeiro a entrar é o primeiro a sair. Essenciais para processamento de tarefas, buffers e algoritmos de busca em largura (BFS).
| Estrutura | Inserção | Remoção | Acesso | Busca |
|---|---|---|---|---|
| Array | O(n) no meio | O(n) no meio | O(1) | O(n) |
| Linked List | O(1) se pont. conhecido | O(1) se pont. conhecido | O(n) | O(n) |
| Stack | O(1) push | O(1) pop | O(n) | O(n) |
| Queue | O(1) enqueue | O(1) dequeue | O(n) | O(n) |
| Hash Table | O(1) médio | O(1) médio | — | O(1) médio |
| Árvore Binária Balanceada | O(log n) | O(log n) | — | O(log n) |
Hash Tables: busca em O(1)
Hash tables (tabelas de espalhamento) mapeiam chaves para valores via função hash. Em JavaScript, objetos e Maps são implementações de hash table. A função hash converte a chave em um índice de array; colisões são tratadas por encadeamento ou endereçamento aberto. Com boa função hash e fator de carga controlado, inserção, remoção e busca são O(1) no caso médio.
// Contagem de frequência com Map
function frequency(nums: number[]): Map<number, number> {
const map = new Map<number, number>();
for (const n of nums) {
map.set(n, (map.get(n) || 0) + 1);
}
return map;
}Árvores: hierarquia e busca eficiente
Árvores organizam dados hierarquicamente. A árvore binária de busca (BST) mantém a propriedade: valores menores à esquerda, maiores à direita. Em árvores balanceadas (AVL, Red-Black), operações são garantidamente O(log n). Árvores são usadas em índices de banco de dados, parsers de linguagens, DOM do browser e sistemas de arquivos.
// Travessia em ordem (in-order) de BST — valores em ordem crescente
function inOrder<T>(node: TreeNode<T> | null, result: T[] = []): T[] {
if (node) {
inOrder(node.left, result);
result.push(node.value);
inOrder(node.right, result);
}
return result;
}Heaps e filas de prioridade
Heaps são árvores binárias completas onde cada pai mantém relação de ordem com os filhos (min-heap ou max-heap). A raiz contém sempre o elemento de maior prioridade. Inserção e remoção do topo são O(log n). Heaps são a base de filas de prioridade, usadas em algoritmos como Dijkstra, A* e scheduling de processos.
Grafos: a generalização
Grafos modelam relações entre entidades. Representados por listas de adjacência ou matrizes, grafos permitem algoritmos de caminho mínimo (Dijkstra, Bellman-Ford), busca (BFS, DFS) e detecção de ciclos. Redes sociais, rotas de entrega e análise de dependências de pacotes são grafos na prática.
Como escolher a estrutura certa
- Use arrays quando o tamanho é conhecido e acesso aleatório é frequente.
- Use listas encadeadas quando inserções/remoções frequentes ocorrem nas extremidades.
- Use hash tables para busca rápida por chave única (caches, índices, contadores).
- Use árvores quando os dados possuem ordenação natural e busca range é necessária.
- Use heaps para sempre acessar o elemento de maior ou menor prioridade.
- Use grafos quando as relações entre entidades são mais importantes que os dados isolados.
Conclusão
Estruturas de dados não são abstrações acadêmicas — são ferramentas práticas que definem limites de performance de qualquer sistema. Conhecer suas características de tempo e espaço permite tomar decisões informadas em projetos reais e responder com confiança em entrevistas técnicas. Pratique implementando-as do zero: a compreensão profunda vem da construção, não apenas do consumo de bibliotecas.
Perguntas frequentes
+Preciso implementar estruturas de dados do zero em projetos reais?
Geralmente não — linguagens modernas fornecem implementações otimizadas. Mas entender como funcionam internamente ajuda a diagnosticar bugs de performance e escolher corretamente.
+Qual estrutura é mais cobrada em entrevistas?
Hash tables e árvores binárias são as mais frequentes, seguidas de grafos e pilhas. Problemas de "two sum" e travessia de árvore aparecem em praticamente todas as big techs.
+Quando devo usar Map ao invés de objeto em JavaScript?
Use Map quando precisar de chaves de qualquer tipo (não apenas strings), quando a ordem de inserção importa, ou quando o tamanho da coleção será frequentemente modificado.
+O que é melhor: lista encadeada ou array?
Depende do padrão de acesso. Arrays para leitura aleatória frequente; listas encadeadas para inserções e remoções dinâmicas, especialmente em extremidades.
Fontes consultadas
- Introduction to Algorithms — Cormen, Leiserson, Rivest, Stein
- MDN: JavaScript Data Structures
- Visualgo — Visualização de Algoritmos e Estruturas
Revisão editorial: publicado em . Última revisão em . Conteúdo educativo, sem patrocínio das ferramentas citadas.
Leia também

Como Começar na Programação do Zero em 2026: Guia Definitivo
Roteiro completo para quem quer entrar na programação em 2026: escolha de linguagem, setup de ambiente, lógica de programação, primeiros projetos, comunidades e como evitar armadilhas comuns de iniciantes.

HTML, CSS e JavaScript: O Trio Essencial da Web Moderna
Domine os três pilares do desenvolvimento web: HTML semântico para estrutura, CSS moderno para estilo e layout responsivo, e JavaScript para interatividade, manipulação do DOM e consumo de APIs.

Git e GitHub Básico: Controle de Versão para Quem Coda
Guia prático de Git e GitHub para iniciantes: instalação, commits, branches, merge, rebase, pull requests, resolução de conflitos e fluxos de trabalho profissionais em equipe.