Estruturas de Dados e Algoritmos Expert
Para quem já programa e quer dominar estruturas de dados e algoritmos avançados para se destacar no mercado
Domine estruturas de dados e algoritmos do zero ao avançado, com muita prática, para escrever código eficiente e brilhar em entrevistas técnicas
Na era da IA, quem domina algoritmos e eficiência sai na frente
A IA acelera o desenvolvimento, mas o diferencial continua sendo o profissional que entende o que está fazendo.

A inteligência artificial já gera código em segundos e mudou para sempre a forma de programar.
Mas a IA não substitui quem domina algoritmos e estruturas de dados: ela multiplica a produtividade de quem entende a lógica e a eficiência por trás de cada solução.
Sem esse domínio, você fica refém de respostas que não entende e não consegue avaliar se o código é correto, rápido ou eficiente em memória.
É justamente esse conhecimento que continua sendo o grande filtro das entrevistas técnicas das melhores empresas e o que garante seu valor no mercado.
No curso Estruturas de Dados e Algoritmos Expert você constrói esse nível técnico com uma didática fácil de entender e muita prática.
Chegou a hora de programar como um verdadeiro engenheiro de software
Você já sabe o básico, mas sente que falta o nível técnico que faz a diferença no mercado

Muita gente já programa, mas trava na hora de evoluir de verdade porque:
- ❌Sabem programar o básico, mas travam em entrevistas técnicas e desafios de código
- ❌Não sabem escolher a estrutura de dados certa para cada problema
- ❌Escrevem código que funciona, mas é lento e ineficiente, sem saber o porquê
- ❌Sentem medo de recursividade, complexidade de algoritmos, árvores e grafos
- ❌Estudam algoritmos por tutoriais soltos e nunca conseguem aplicar na prática
- ❌Veem vagas e competições exigindo esse conhecimento e sentem que ficam para trás
A boa notícia é que estruturas de dados e algoritmos podem ser aprendidos de forma clara, prática e direto ao ponto. Com um método estruturado e passo a passo, você sai da insegurança e alcança o nível técnico que te destaca em qualquer processo seletivo.
13 capítulos de conteúdo prático
O domínio completo de estruturas de dados e algoritmos para estar entre os melhores profissionais na carreira de desenvolvimento
Quero garantir minha vagaFicha técnica
Para quem é
- Estudantes de programação
- Quem precisa repassar conteúdos da faculdade
- Profissionais e estudantes que precisam aprofundar em estruturas de dados e técnicas de algoritmos avançadas
Para quem não é
- Quem ainda não sabe nada de programação
Requisitos
- Lógica de programação em qualquer linguagem
- Conhecimento básico de orientação a objetos em qualquer linguagem
Ferramentas
Números do conteúdo
O que você vai aprender
Tudo que você precisa para evoluir com velocidade e segurança
Livro Texto / Áudio / Vídeo aulas
Trilha de aprendizado multiformato permite que você possa ler e assistir quando e quantas vezes quiser.
Materiais de apoio
Você terá à disposição materiais de apoio tais como slides, guias passo a passo, trechos de código, resumos, etc., para te ajudar a estudar e recordar os tópicos ensinados.
Suporte a dúvidas
Você tem suporte a todas suas dúvidas sobre as aulas em nosso canal de Perguntas e respostas. Todas dúvidas são respondidas e continuamos atendendo cada dúvida sua até ela ser resolvida.
Exercícios práticos
Nossos treinamentos possuem um enfoque muito prático, com exercícios onde o aluno realmente aplica na prática o que está aprendendo com exemplos práticos, para se preparar adequadamente para a realidade do mercado.
Desafios com correção
Aqui você é avaliado de verdade, com mapeamento de compotências avaliadas. Aqui você vai ter profissionais trabalhando para te atender individualmente. Ao longo dos treinamentos você receberá desafios para resolver, e sua entrega será avaliada por um humano, retornando critério a critério sobre sua solução.
Certificado de conclusão
Obtenha seu certificado de 300h ao finalizar todos desafios, o qual você pode incluir no seu currículo e usar como horas complementares na faculdade.
O plano detalhado para dominar estruturas de dados e algoritmos
Baseado no método Devsuperior, organizado em 6 fases cuidadosamente delineadas

Essencial
A base para pensar como um engenheiro de software: tópicos iniciais (tipos de dados, memória e revisão de OO), algoritmos clássicos de strings, manipulação de arrays e o paradigma da recursividade, com muitos exercícios práticos.
Complexidade de algoritmos
Como avaliar a eficiência de algoritmos em tempo e espaço, com foco em notação assintótica (Big O, Big Omega, Big Theta) e análise das complexidades mais comuns: linear, quadrática, cúbica, exponencial e logarítmica.
Busca e ordenação
Algoritmos clássicos de busca (sequencial e binária) e de ordenação (bubble, selection, insertion, merge e quick sort), com implementações, análise de complexidade e aplicações.
Estruturas básicas
As estruturas de dados que todo profissional usa no dia a dia: listas encadeadas (simples, duplas e circulares), pilhas e filas, e conjuntos e dicionários com tabelas de espalhamento (hashing), com projetos e problemas práticos.
Estruturas avançadas
Os temas mais temidos explicados de forma natural: árvores binárias e de busca, travessias e operações de inserção e remoção, além de grafos com suas representações e os algoritmos DFS, BFS, caminhos mínimos e árvores geradoras mínimas.
Técnicas avançadas
As técnicas de otimização mais exigidas em entrevistas técnicas e competições: algoritmos gulosos para problemas de otimização e programação dinâmica com identificação de subproblemas, memoização e tabulação.
Ementa detalhada
Confira todo o conteúdo programático
Esta é uma seção introdutória, com boas-vindas e orientações importantes sobre o treinamento.
- Algoritmos e Lógica de Programação
- Estruturas de dados é sobre o quê
- Precisa saber OO antes de ED
- Esse curso também é para outras linguagens
- Vamos falar sobre objetos e funções
- Tipos estruturados em JavaScript PARTE 1
- Tipos estruturados em JavaScript PARTE 2
- Funções em Javascript sem OO
- Funções em Javascript com OO
- Tipos estruturados em Java PARTE 1
- Tipos estruturados em Java PARTE 2
- Funções em Java sem OO
- Funções em Java com OO
- Tipos estruturados em CSharp
- Funções em CSharp sem OO
- Funções em CSharp com OO
- Tipos estruturados em Python
- Funções em Python sem OO
- Funções em Python com OO
- Vamos falar sobre comportamento de memória
- Tipos referência e tipos valor em Java
- Tipos referência e tipos valor em CSharp
- Tipos referência e tipos valor em Javascript
- Tipos referência e tipos valor em Python
- Desalocação de memória garbage collector e escopo local
- Visao geral ler arquivo JSON e manipular objetos
- Leitura arquivo JSON em JavaScript
- Leitura arquivo JSON em Python (Parte 1)
- Leitura arquivo JSON e tratamento campo tipo timestamp (Parte 2)
- Criacao projeto Java, mapeamento entidades
- Inclusao dependencia leitura JSON
- Leitura arquivo JSON em Java
- Ajustes no projeto java para lidar com atributo timestamp
- Criacao projeto C# e mapeamento entidades
- Leitura arquivo JSON em C#
- Literais e expressões em Javascript PARTE 1
- Literais e expressões em Javascript PARTE 2
- Imutabilidade de strings em Javascript
- Funções de string em Javascript PARTE 1
- Funções de string em Javascript PARTE 2
- Funções de string em Javascript PARTE 3
- Expressões regulares
- Dica de ChatGPT para outras linguagens
- Exemplo limpar CPF
- Exemplo testar domínio br
- Exemplo encontrar emails em um texto
- Referência de expressões regulares PARTE 1
- Referência de expressões regulares PARTE 2
- Apresentando os exercícios
- Solução do problema cpf
- Solução alternativa do problema cpf usando for
- Solução do problema dominio-email
- Solução do problema data1
- Solução alternativa do problema data1 usando substring
- Solução do problema data2
- Solução do problema senha
- Solução alternativa do problema senha usando regex
- Solução do problema anagram (1)
- Solução do problema anagram (2)
- Solução alternativa do problema anagram usando array
- Solução do problema prefixo-comum
- Solução do problema transacoes PARTE 1
- Solução do problema transacoes PARTE 2
- Exercicio maximo 1s consecutivos
- Exercicio produto escalar dois arrays
- Exercicio numeros par de digitos
- Exercicio encontrar vendedor com maior valor de venda
- Exercício quadrado de um array ordenado
- Exercicio duplicar zeros
- Exercicio merge arrays
- Exercicio contem valores duplicados
- Recursividade introdução e motivação
- Solução do problema soma-naturais
- Solução do problema fatorial
- Vantagens e desvantagens da recursividade
- Casos base e casos recursivos
- Pilha de chamadas
- Recursividade de cauda
- Problema fatorial com recursividade de cauda
- Solução ineficiente do problema fibonacci
- Solução fibonacci com recursividade de cauda
- Conceito de cabeça e cauda de uma lista
- Solução do problema reverse
- O que é complexidade de algoritmos
- Exemplo busca sequencial
- Análise da complexidade de tempo
- Análise da complexidade de espaço
- Notação assíntótica
- Big O, Big Omega, Big Theta
- Exemplo de algoritmo de ordem linear
- Discutindo as complexidades mais comuns
- Discutindo a complexidade exponencial
- Exemplo de algoritmo de ordem quadrática
- Exemplo de algoritmo de ordem cúbica
- Exemplo de algoritmo de complexidade exponencial
- Exemplo de algoritmo de coplexidade logarítmica
- Definição e tipos de busca
- Busca sequencial
- Busca binaria
- Implementacao busca binaria iterativa
- Implementacao busca binaria recursiva
- Definição e exemplos de ordenação
- Bubble sort
- Implementacao bubble sort
- Melhorias bubble sort e complexidade
- Selection sort
- Implementacao selection sort
- Insertion sort
- Implementacao insertion sort
- Merge sort
- Implementacao Merge sort
- Complexidade merge-sort
- Quick sort
- Implementando quick sort
- Complexidade quick sort
- Visao geral capítulo
- Definicao lista encadeada e representação na memória
- Analogia, vantagens e desvantagens
- Implementacao estrutura no
- Adicionar elemento ao final da lista
- Imprimir elementos da lista
- Obter tamanho da lista
- Verificar lista vazia
- Limpar lista
- Adicionar elemento no inicio da lista
- Obter elemento em uma posicao especifica
- Adicionar elemento em uma posicao especifica
- Obter posicao de um elemento
- Verificar se elemento existe na lista
- Remover elemento de uma posicao especifica (Parte 1)
- Remover elemento de uma posicao especifica (Parte 2)
- Remover elemento especifico
- Apresentacao exemplo pratico to-do List
- Organizando projeto, implementando classe Task
- Classe TaskList
- Adicionar tarefas
- Exibindo lista de tarefas
- Obter lista com tarefas de um dado tipo
- Buscar tarefa por id
- Deletar tarefa por id
- Marcar tarefa como concluida por id
- Editar descrição, tipo, status de uma tarefa por id
- Apresentacao algoritmo reposicionar tarefa
- Reposicionar tarefa
- Lista duplamente encadeada, vantagens e desvantagens
- Estrutura no
- Estrutura lista duplamente encadeada
- Adicionar elemento ao final da lista duplamente encadeada
- Exibir elementos da lista duplamente encadeada
- Limpar lista, obter tamanho, verifica se esta vazia
- Adicionar elemento no inicio da lista duplamente encadeada
- Obter elemento em uma posicao especifica
- Adicionar elemento em uma posicao especifica da lista duplamente encadeada
- Obter posicao elemento, verifica se elemento existe na lista
- Remover primeiro elemento lista duplamente encad
- Remove ultimo elemento lista duplamente encad
- Remover elemento de uma posicao especifica lista duplamente encad
- Remover elemento especifico lista duplamente encad
- Reverter lista duplamente encadeada
- Visão geral do capítulo
- Pilha - definição e aplicações
- Problema exemplo is-balanced
- Operações de uma pilha
- Implementação de pilha com array PARTE 1
- Implementação de pilha com array PARTE 2
- Implementação de pilha com lista
- Solução do problema is-balanced
- Usando a pilha da própria linguagem
- Solução do problema valid-parentheses
- Solução do problema remove-duplicates
- Fila - definição e aplicações
- Operações de uma fila
- Implementação de fila com lista PARTE 1
- Implementação de fila com lista PARTE 2
- Solução do problema tickets PARTE 1
- Solução do problema tickets PARTE 2
- Solução do problema sandwich PARTE 1
- Solução do problema sandwich PARTE 2
- Visão geral do capítulo
- Conjunto - definição e aplicações
- Implementações de conjunto
- Operações de um conjunto
- Testando as operações de conjunto
- Solução do problema visitantes
- Solução do problema alunos
- Solução do problema intersection
- Dicionário - definição e aplicações
- Implementações de dicionários
- Operações de um dicionário
- Testando operações de dicionário
- Solução do problema votacao
- Solução do problema word-count PARTE 1
- Solução do problema word-count PARTE 2
- Solução do problema two-sum PARTE 1
- Solução do problema two-sum PARTE 2
- Solução do problema transacoes PARTE 1
- Solução do problema transacoes PARTE 2
- Visão geral e aviso sobre conteúdo avançado
- Árvores - definição e aplicações
- Raiz, filho, pai, irmão, nós externos e internos, arestas
- Caminho, ancestral, descendente, subárvore, árvore binária
- Profundidade, nível, altura
- Árvores genéricas
- Projeto da árvore genérica
- Começando a classe Node
- Finalizando a classe Node
- Convenção underline para métodos protegidos
- Começando GenericTree e método add
- Primeiro teste da árvore genérica
- Função validade e children atualizada
- Implementando o método add completo
- Melhorando o print e instanciando toda árvore
- DFS - Busca em profundidade
- Funções elements e positions
- Função find
- Funções isExternal, isRoot e parent
- Funções replace, size, isEmpty
- Função remove PARTE 1
- Função remove PARTE 2
- BFS - Busca em largura
- Visão geral do capítulo
- O que é um algoritmo guloso
- Problemas clássicos guloso - Problema da moeda
- Implementação do problema da moeda
- Problemas clássicos guloso - Agendamento de intervalos
- Implementação do problema agendamento de intervalos
- Problemas clássicos guloso - Colocando feras na jaula
- Implementação o problema colocando feras na jaula
- Algoritmo guloso - Breve revisão e panorama
- Apresentação da lista de exercícios guloso
- Solução Garrafas
- Solução Scarecrow
- Solução Cookies
- Solução Maior número possível
- Solução Lemonade
- Solução Minimum rooms
- Solução Boats
- Solução Tarefas e prazos
- Solução Police and thieves
- Solução polícia e ladrão
- Por que estudar grafos
- História dos grafos
- Definição Grafos
- Conceitos Básicos - Parte 1
- Conceitos Básicos - Parte 2
- Conceitos Básicos - Parte 3
- Resolução Exercícios - Conceitos Básicos
- Tipos de Grafos
- Resolução Exercícios - Tipos de Grafos
- Caminhos em Grafos - Parte 1
- Caminhos em Grafos - Parte 2
- Resolução Exercícios - Caminhos em Grafos - Parte 1
- Resolução Exercícios - Caminhos em Grafos - Parte 2
- Resolução Exercícios - Caminhos em Grafos - Parte 3
- Resolução Exercícios - Caminhos em Grafos - Parte 4
- Estruturas em Grafos - Parte 1
- Estruturas em Grafos - Parte 2
- Resolução Exercícios - Estrutura em Grafos - Parte 1
- Resolução Exercícios - Estrutura em Grafos - Parte 2
- Representação de Grafos em Memória - Lista de arestas
- Representação de Grafos em Memória - Matriz de Adjacência
- Implementação Matriz de Adjacência - Parte 1
- Implementação Matriz de Adjacência - Parte 2
- Representação de Grafos em Memória - Lista de Adjacências
- Implementação Lista de Adjacências - Parte 1
- Implementação Lista de Adjacências - Parte 2
- Resolução Exercícios - Representação de Grafos em Memória - Parte 1
- Resolução Exercícios - Representação de Grafos em Memória - Parte 2
- Percorrendo um grafo
- Busca em Largura - Intuição
- Busca em Largura - Algoritmo
- Busca em Largura - Implementação
- Exercício Busca em Largura 1
- Exercício Busca em Largura 2
- Busca em Profundidade - Intuição
- Busca em Profundidade - Algoritmo Recursivo
- Busca em Profundidade - Algoritmo Iterativo
- Busca em Profundidade - Implementação Iterativa
- Exercício Busca em Profundidade
- Busca em Profundidade - Tempos de entrada e saída
- Ordenação Topológica - Parte 1
- Ordenação Topológica - Parte 2
- O Problema do Menor Caminho
- Conceitos fundamentais menores caminhos
- Algoritmo de Dijkstra
- Resolução exercício - Algoritmo de Dijkstra
- Implementação Algoritmo de Dijkstra
- Algoritmo de Bellman-Ford - Parte 1
- Algoritmo de Bellman-Ford - Parte 2
- Algoritmo de Bellman-Ford - Parte 3
- Implementação Algoritmo de Bellman-Ford
- Algoritmo de Floyd-Warshall
- Implementação Algoritmo de Floyd-Warshall
- Union-Find (DSU) - Parte 1
- Union-Find (DSU) - Parte 2
- Union-Find (DSU) - Implementação
- Árvores Mínimas
- Algoritmo de Prim
- Algoritmo de Prim - Implementação
- Algoritmo de Kruskal
- Algoritmo de Kruskal - Implementação
- Apresentação Lista Exercícios
- Visão geral do capítulo
- Por que estudar Programação Dinâmica
- Introdução à Programação Dinâmica Parte 1
- Introdução à Programação Dinâmica Parte 2
- Programação Dinâmica - Consolidando conceitos
- Problema do Troco - Parte 1
- Problema do Troco - Parte 2
- Problema Caminhos no Grid - Parte 1
- Problema Caminhos no Grid - Parte 2
- Problema Soma Contígua Máxima - Parte 1
- Problema Soma Contígua Máxima - Parte 2
- Problema Maior Subsequência Crescente - Parte 1
- Problema Maior Subsequência Crescente - Parte 2
- Problema Corte de Hastes - Parte 1
- Problema Corte de Hastes - Parte 2
- Problema Corte de Hastes - Parte 3
- Problema da Mochila - Parte 1
- Problema da Mochila - Parte 2
- Problema da Mochila - Parte 3
- Problema Maior Subsequência Comum - Parte 1
- Problema Maior Subsequência Comum - Parte 2
- Problema Maior Subsequência Comum - Parte 3
- Problema Maior Subsequência Comum - Parte 4
- Apresentação da lista de exercícios
- Solução do problema climbing_stairs
- Solução do problema mincost_climbing_stairs
- Solução do problema frog_jumps
- Solução do problema coins
- Solução do problema minimum_path_sum
- Solução do problema precious_stones
- Solução do problema jump_game
- Solução do problema min_falling_path_sum
- Solução do problema house_robber
Sobre nós
Mais de 500 mil alunos impactados

Nelio Alves
A Devsuperior é uma escola de programação e tecnologia referência no mercado, com mais de 500 mil alunos impactados pelo nosso método de ensino.
Nossa missão: ajudar pessoas a ingressar ou se recolocar na carreira de tecnologia.
Nosso método foi criado por Nelio Alves, doutor em Engenharia de Software, com mais de 20 anos de carreira, e vasta experiência como professor e coordenador de cursos superiores, técnicos e de pós-graduação. Ficou mundialmente conhecido por ser autor dos cursos online de Java e C# em Língua Portuguesa mais vendidos do mundo pela plataforma Udemy.
O melhor caminho para alcançar a excelência técnica em programação
Troque a confusão pela clareza de um passo a passo estruturado
Estruturas de Dados e Algoritmos Expert
Faça sua matrícula e comece hoje mesmo
- Livro Texto / Áudio / Vídeo aulas
- Material de apoio
- Suporte a dúvidas
- Exercícios e projetos práticos
- Desafios com correção
- 13 módulos
- 500+ páginas
- 60+ horas de vídeo
- Certificado 320h (tempo de aula + estudo)
- Prazo: 1 ano (renovação tem 50% de desconto)
- Garantia: 7 dias

Garantia incondicional de 7 dias
Experimente sem nenhum risco

Você adquire agora o acesso completo ao curso Estruturas de Dados e Algoritmos Expert e tem 7 dias para avaliar com calma.
Se por qualquer motivo achar que não é para você, basta solicitar o cancelamento e devolvemos 100% do seu investimento.
Seu risco é zero. A única decisão que falta é dar o próximo passo rumo à excelência técnica.
Não precisa acreditar em mim
Veja histórias de quem já seguiu nosso método
Perguntas frequentes
Ainda ficou com alguma dúvida? Envie-nos um email: contato@devsuperior.com
Todos códigos das aulas e exercícios são disponibilizados nas linguagens: Javascript, Java, C# e Python. Nas vídeo aulas usamos Javascript, mas vale ressaltar que o importante é saber a técnica ensinada nas aulas, que é exatamente a mesma para todas linguagens.
Não. Este curso tem como pré-requisito conhecimento básico de lógica de programação em qualquer linguagem, bem como conhecimento básico de OO em qualquer linguagem. Se você ainda não sabe absolutamente nada sobre programação, recomendo que primeiro faça o nosso curso de Lógica de Programação, e pelo menos boa parte do nosso curso de OO na linguagem de sua preferência.
Você receberá um email de acesso imediatamente, assim que seu pagamento for processado pela nossa plataforma parceira de pagamento (Eduzz ou Pagar.me).
Com certeza. Neste curso você vai ter um material de alta qualidade, passo a passo, e cuidadosamente projetado pelo prof. Nelio Alves que tem mais de 20 anos de experiência no ensino de tecnologia. Você vai do zero ao avançado, de uma forma prática e eficaz, com a melhor didática do mercado.
Vai sim. Nossos treinamentos dão valor à base dos fundamentos, mas tem também MUITO enfoque prático, com exercícios e projetos pra você colocar em prática seus conhecimento e se preparar de verdade para o mercado.
Vai depender muito da dedicação de cada um. Nossa estimativa é que quem puder estudar com consistência, porém sem correria, intercalando com outras atividades, levará em média 3 a 6 meses para concluir.
As aulas são gravadas, então você pode assistir quantas vezes quiser, em qualquer horário que for mais conveniente para você. Você faz o curso no seu ritmo. Mas recomendo que você faça uma tabela de horários de estudo na semana para te ajudar a se organizar, ok?
Boa parte sim, mas parte das aulas também são ministradas pelos profs. Alexandre Oliveira e Vitor Hugo. Todo curso foi projetado e supervisionado pelo prof. Nelio Alves.
Durante seu tempo de acesso, você tem total liberdade para estudar no seu tempo. Quem dita o ritmo do seu estudo é você.
Dentro da plataforma de ensino há uma área de "Perguntas e Respostas". Sempre que você tiver qualquer dúvida sobre o curso, pode postar sua dúvida lá, que serão respondidas até resolver sua dúvida.
Sim. Quando você terminar de entregar os desafios do curso, você receberá um certificado de 300 horas, correspondente ao tempo de aulas + estudo. Assim que você receber o retorno do último desafio, imediatamente seu certificado estará disponível na plataforma de ensino. Você pode usar esse certificado no seu currículo, ou como comprovação de horas na faculdade, e o certificado ficará disponível mesmo se no futuro você não for mais nosso estudante.
Sim. Enquanto você tiver acesso ao curso, sempre que houver uma atualização no curso, você receberá sem nenhum custo adicional.
Sim. Todas aulas e materiais de apoio já estão finalizados e você pode completar o curso todo e obter seu certificado. Mesmo assim, se algum conteúdo for adicionado ao curso enquanto você for estudante, você receberá sem custo adicional.
Sim. Você tem garantia de 7 dias para testar o curso sem risco. Dentro desse prazo, se por qualquer motivo você achar que o curso não é para você, basta solicitar o cancelamento que 100% do seu dinheiro será devolvido.
Manda um email pra gente: contato@devsuperior.com