🗂️ Estruturas de dados
Escolher a estrutura errada transforma um algoritmo elegante em um gargalo — e nenhuma otimização depois recupera isso. Esta trilha vai fundo em cada uma das estruturas fundamentais: como elas organizam a memória, quais operações ficam baratas por causa dessa organização, e qual preço se paga em troca. De arrays e listas ligadas até hash tables, árvores de busca balanceadas e heaps — sempre implementando do zero, para ver por dentro o que a biblioteca padrão esconde.
Arrays e listas ligadas
Memória contígua vs ponteiros. Por que inserir no início custa O(n) num array e O(1) numa lista — e por que, mesmo assim, o array quase sempre ganha na prática.
Disponível 4.2Pilhas, filas e deques
LIFO, FIFO e as duas pontas. O buffer circular que entrega O(1) sem mover um byte, e a fila construída com duas pilhas.
Disponível 4.3Hash tables por dentro
Funções hash, colisões, encadeamento vs endereçamento aberto e o fator de carga — a variável que decide se o O(1) se sustenta ou desmorona.
Disponível 4.4Árvores binárias de busca
Busca binária que aceita inserções. Travessias, remoção com sucessor e o que a BST tem que a hash table não tem: ordem.
Disponível 4.5Árvores balanceadas
Rotações, AVL, rubro-negras e B-trees. Como garantir O(log n) no pior caso — e por que todo índice de banco de dados é uma árvore.
Disponível 4.6Heaps e filas de prioridade
Uma árvore binária completa guardada num array, sem um único ponteiro. Sift up, sift down, heapsort e o coração do Dijkstra.
Disponível