Estudar estruturas de dados é fundamental para quem quer se aprofundar em algoritmos e programação.

Neste curso, explico como implementar as principais estruturas de dados usando a linguagem Java. No curso, uso vários conceitos de Programação Orientada a Objetos (POO). Se você não conhece os conceitos básicos de POO, sugiro assistir a este curso de Programação Orientada a Objetos.

O código de cada aula está disponível no https://github.com/leandroguarino.

Aula 01 – Vetor
A primeira estrutura de dados que todo mundo tem que estudar é vetor, mesmo que muitos não saibam que vetor é uma estrutura de dados.

Aula 02 – Vetor de String e Busca linear
Vetor é ótimo para a leitura dos dados, já que permite acesso direto aos valores a partir de índices. Um dos algoritmos mais básicos que são aplicados a vetores é o algoritmo de busca linear, detalhado nesta aula.

Aula 03 – Como criar uma lista ligada?
Vetores têm suas limitações, principalmente o tamanho limitado e os “buracos” que são deixados quando elementos são removidos. Essas limitações são solucionadas em lista ligada. Nesta aula, você aprenderá o que é uma lista ligada e como implementar uma lista ligada em Java.

Aula 04 – Remoção de Elementos de uma lista ligada
Uma das ações mais difíceis em uma lista ligada é a remoção. Nesta aula, explico como implementar esse algoritmo de remoção para cada cenário de uma lista ligada.

Aula 05 – Lista ligada genérica
Uma lista ligada de números não serve para muita coisa. Geralmente, queremos usar lista ligada com nossos próprios dados. Para isso, o recurso de Generics do Java ajuda a implementar estruturas de dados genéricas, isto é, que trabalham com qualquer tipo de dado. Nesta aula, explico como implementar uma lista ligada genérica em Java.

Aula 06 – Comparação entre vetor e lista ligada
Algo que queremos sempre é melhorar a performance de algoritmos. Escolher a estrutura de dados certa para um problema é essencial para isso. Nesta aula, mostro a comparação entre vetor e lista ligada nas operações de adição de novos elementos e leitura dos dados.

Aula 07 – Iterator na lista ligada
Percorrer uma lista ligada como se percorre um vetor não é nada inteligente. Para melhorar isso existem os iteradores (iterators). Nesta aula, explico o que é um iterator e como implementar um Iterator em Java.

Aula 08 – O que é complexidade de algoritmos?
O principal tópico de Estruturas de Dados é a tal complexidade de algoritmos. Nesta aula, eu explico de uma forma simples o que é complexidade de algoritmos, a notação Big O e os diferentes casos mais conhecidos do estudo de complexidade de algoritmos: linear, quadrática, exponencial, logarítmica, etc.

Aula 09 – Busca linear em Java
Nesta aula, eu retomo o algoritmo de busca linear, mostro como implementar busca linear e explico qual a complexidade do algoritmo de busca linear.

Aula 10 – Busca Binária em Java
Muito melhor que a busca linear é a busca binária, porém ela precisa que os dados da lista ou vetor estejam ordenados. Nesta aula, explico o algoritmo de busca binária, passo-a-passo, e mostro como implementar busca binária em Java.

Aula 11 – Algoritmo Bubble Sort
No estudo de estruturas de dados, para facilitar o entendimento sobre complexidade de algoritmos, os algoritmos de ordenação são bem didáticos. A partir desta aula, eu abordo vários algoritmos de ordenação bem conhecidos, começando pelo algoritmo Bubble Sort. Eu mostro como implementar o código do algoritmo Bubble Sort e explico qual a complexidade do algoritmo Bubble Sort.

Aula 12 – Algoritmo Insertion Sort
Nesta aula, explico, passo-a-passo, como implementar o código do algoritmo Insertion Sort em Java e qual a complexidade do algoritmo Insertion Sort.

Aula 13 – Algoritmo Selection Sort
Nesta aula, explico, passo-a-passo, como implementar o código do algoritmo Selection Sort em Java e qual a complexidade do algoritmo Selection Sort.

Aula 14 – O que é recursividade?
Sem entender o que é recursividade não dá para avançar em estruturas de dados, porque os algoritmos mais eficientes geralmente são algoritmos recursivos. Portanto, esta aula faz uma pausa nos algoritmos de ordenação para trazer o que é recursividade, para que você aprenda com exemplos.

Aula 15 – Algoritmo Shell Sort
O algoritmo Shell Sort é um dos mais estranhos, porém é um algoritmo eficiente para ordenação. É estranho porque usa uma lógica de saltos na lista de dados para fazer a ordenação parcial e, por fim, fazer uma ordenação total dos valores. Nesta aula, explico o passo-a-passo do algoritmo Shell Sort e como implementar o código do algoritmo Shell Sort em Java.

Aula 16 – Algoritmo Heap Sort
Heap é um tipo de árvore que possui uma propriedade que ajuda a manter a árvore ordenada. Esse conceito é essencial para o algoritmo Heap Sort. Nesta aula, explico, passo-a-passo, como implementar o código do algoritmo Heap Sort em Java e qual a complexidade do algoritmo Heap Sort.

Aula 17 – Algoritmo Quick Sort
Um algoritmo de ordenação dos mais eficientes para lidar com grande volume de dados é o algoritmo Quick Sort. Esse algoritmo usa lógica de um pivô, e eu explico isso detalhadamente nesta aula. Também explico como implementar o código do algoritmo Quick Sort em Java.

Aula 18 – Comparação de algoritmos de ordenação
Para finalizar o estudo de algoritmos de ordenação, eu mostro todos os algoritmos rodando com os mesmos dados, para medir a quantidade de trocas e o tempo de execução de cada algoritmo.

Aula 19 – Fila
Fila não é bem uma estrutura de dados, é um Tipo Abstrato de Dados (TAD), porque uma fila apenas define operações restritas em uma lista ligada ou vetor, por exemplo. Nesta aula, explico o que é Fila e como implementar uma Fila em Java.

Aula 20 – Pilha
Assim como Fila é um Tipo Abstrato de Dados (TAD), Pilha também é. Nesta aula, explico o que é Pilha, como funciona e como implementar uma Pilha em Java.

Aula 21 – Árvore Binária
Para você poder dizer que sabe estruturas de dados, não basta saber lista, pilha, fila… isso é só a base. Problemas complexos de computação exigem árvores e grafos. O primeiro passo é entender a árvore binária, a árvore mais simples. Nesta aula, explico o que é uma árvore binária e como implementar o código de árvore binária em Java.

Aula 22 – Como percorrer uma árvore binária?
Inserir elementos em uma árvore binária é até simples de entender, mas é necessário aprender a ler os dados da árvore também. Para isso, existem os métodos de em-ordem, pré-ordem e pós-ordem. Nesta aula, explico o código de cada um dos métodos para percorrer uma árvore binária.

Aula 23 – Remoção de nós de árvore binária
Uma das operações mais custosas para processar em estruturas de dados é a remoção. Para minimizar isso, existem diferentes estratégias. Nesta aula, explico quais as estratégias para remoção de nós de árvores binárias e mostro como fazer isso no código.

Aula 24 – O que são grafos?
Essa é a estrutura de dados mais genérica. Afinal, toda lista ligada é um grafo, toda árvore binária é um grafo. Entender grafos é essencial para modelar problemas complexos de relacionamentos, como uma rede social, por exemplo. Nesta aula, explico o que são grafos e para que servem os grafos, além de explicar os conceitos de nós, arestas, grafo direcionado, grafo não-direcionado e grafo com pesos.

Aula 25 – Como implementar grafos em Java?
Nesta aula, explico como implementar o código de grafos em Java. O grafo implementado pode ser usado para qualquer tipo de dados, pois é um grafo direcionado genérico.

Aula 26 – Algoritmo de Busca em Largura em grafos
Se inserimos nós em um grafo é porque queremos varrê-los posteriormente, para lermos os dados. Nesta aula, explico um algoritmo muito famoso para percorrer grafos: busca em largura (BFS), e eu faço como implementar o código de Busca em largura em grafos.

Se você deseja aprender algum tópico específico de Estruturas de Dados, envie uma mensagem pelo site.


0 Comments

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *