Curso independente · C++17

Estruturas de Dados na Prática

Um percurso para compreender como os dados são organizados, como cada operação funciona e o que acontece na memória. O foco é implementar estruturas do zero, testar suas invariantes e escrever C++ claro e seguro.

4 módulos disponíveis27 conteúdos35 exercíciosC++17
01

Trilha de aprendizagem

Módulos do curso

Avance pela sequência sugerida: comece entendendo como os dados são representados, conecte esse conhecimento à memória e termine analisando o custo dos algoritmos.

Módulo 01 · 6 conteúdos Disponível

Fundamentos

Construa a base necessária para implementar estruturas de dados em C++: tipos primitivos e abstratos, registros, ponteiros, gerenciamento de memória e análise de complexidade.

  • TAD
  • structs e classes
  • memória
  • ponteiros
  • Big O
  • C++17
Seu progresso na prática0 de 10 exercícios
Começar o módulo
Módulo 02 · 6 conteúdosDisponível

Estruturas sequenciais

Aprenda a representar sequências em C++, trabalhar com índices e implementar inserção, remoção e busca em vetores, matrizes, strings e listas sequenciais.

  • vetores
  • matrizes
  • busca
  • strings
  • lista sequencial
  • C++17
Começar o módulo
Módulo 03 · 8 conteúdosDisponível

Listas encadeadas

Implemente estruturas lineares e entenda como nós e referências trabalham na memória: pilhas, filas, deques, listas simples e duplas e ordenação.

  • pilha
  • fila
  • deque
  • lista simples
  • lista dupla
  • ordenação
Seu progresso na prática0 de 10 exercícios
Começar o módulo
Módulo 04 · 7 conteúdosDisponível

Grafos

Modele relações em rede, compare matriz e lista de adjacência, percorra vértices com DFS e BFS e encontre caminhos mínimos em grafos ponderados.

  • matriz
  • lista
  • DFS
  • BFS
  • pesos
  • Dijkstra
Seu progresso na prática0 de 10 exercícios
Começar o módulo
02

Mapa conceitual

Como as estruturas de dados se organizam

Uma estrutura de dados é uma forma planejada de organizar informações na memória. Ela define como os valores ficam relacionados e quais caminhos o programa usa para encontrá-los ou modificá-los.

Ela existe porque guardar valores não basta. Um programa também precisa buscar, inserir, remover, percorrer e ordenar esses valores sem transformar cada operação em um trabalho desnecessariamente difícil.

1 · DadosValores isoladosNomes, notas, códigos e relações ainda sem uma organização adequada ao problema.
2 · EstruturaUma regra de organizaçãoÍndices, ligações, hierarquias ou chaves determinam como os valores se conectam.
3 · OperaçõesTrabalho previsívelO algoritmo sabe onde procurar e como alterar os dados preservando a organização.

Não existe uma estrutura melhor para todos os problemas. Vetores favorecem acesso por índice, listas facilitam certas alterações por ligação, tabelas hash procuram por chave e grafos representam redes. O mapa abaixo apresenta essas famílias e seus relacionamentos.

03

Exemplos visuais

Como cada estrutura guarda os dados

A melhor estrutura depende de como os dados serão acessados, alterados e relacionados. Os diagramas abaixo mostram a diferença de forma direta.

Acesso direto

Array fixo

Reserva uma quantidade definida de posições consecutivas. Cada valor é encontrado rapidamente pelo índice, mas o tamanho não cresce durante o uso.

  • Guardar as sete temperaturas de uma semana.
  • Representar uma linha de matriz ou os canais RGB de uma cor.
  • Use quando a quantidade de elementos é conhecida e fixa.
Tamanho dinâmico

Lista dinâmica — list

Mantém os elementos juntos na memória como um array, mas pode aumentar sua capacidade quando novos valores são adicionados.

  • Guardar produtos, alunos ou resultados cuja quantidade pode variar.
  • Percorrer muitos elementos com bom aproveitamento de cache.
  • É a escolha padrão quando você precisa de índices e tamanho variável.
Encadeamento

Lista encadeada

Cada nó guarda um valor e o endereço do próximo. Os nós não precisam estar lado a lado na memória.

  • Inserir ou remover elementos quando o nó da operação já é conhecido.
  • Implementar filas, históricos e sequências com muitas alterações internas.
  • Evite quando precisar acessar frequentemente “o elemento de índice 500”.
Estrutura não linear

Grafo

Representa elementos como vértices e suas relações como arestas. As conexões podem ter direção, distância ou custo.

  • Calcular rotas entre cidades ou estações de transporte.
  • Representar amizades, seguidores e redes de computadores.
  • Modelar dependências entre disciplinas, tarefas ou pacotes.
Acesso por chave

Tabela hash

Uma função transforma a chave em um índice. Chaves diferentes podem cair no mesmo bucket, como “Bia” e “Leo” no exemplo, exigindo tratamento de colisão.

  • Localizar rapidamente um usuário pelo e-mail ou um produto pelo código.
  • Contar a frequência de palavras ou eliminar valores repetidos.
  • Implementar dicionários, caches e índices de consulta.