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
Curso independente · C++17
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.
Trilha de aprendizagem
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.
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.
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.
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.
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.
Mapa conceitual
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.
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.
Exemplos visuais
A melhor estrutura depende de como os dados serão acessados, alterados e relacionados. Os diagramas abaixo mostram a diferença de forma direta.
array[3] acessa diretamente o valor 47.
Reserva uma quantidade definida de posições consecutivas. Cada valor é encontrado rapidamente pelo índice, mas o tamanho não cresce durante o uso.
append(55) ocupa a próxima posição livre.
listMantém os elementos juntos na memória como um array, mas pode aumentar sua capacidade quando novos valores são adicionados.
Para chegar ao 40, o percurso começa no primeiro nó.
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.
Arestas mostram quais elementos possuem uma relação direta.
Representa elementos como vértices e suas relações como arestas. As conexões podem ter direção, distância ou custo.
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.