C# é bom para estruturas de dados e algoritmos?
Sim. Ele se lê de um jeito muito parecido com o Java: os tipos deixam explícitos cada nó, cada referência e cada parâmetro genérico, e System.Collections.Generic cobre a maioria das estruturas desta trilha. Vale criar dois hábitos cedo. O LINQ é conciso, mas todo OrderBy é uma ordenação e todo Where é um laço, então ele esconde os custos que você está aprendendo a contar; e Array.Sort é instável, o que importa sempre que chaves iguais precisam manter a ordem.
Quais coleções do .NET correspondem a quais estruturas de dados?
List<T> é um array dinâmico, Stack<T> e Queue<T> são baseadas em arrays, LinkedList<T> é uma lista duplamente ligada, Dictionary<TKey,TValue> e HashSet<T> são tabelas hash, e SortedDictionary<TKey,TValue> e SortedSet<T> são árvores rubro-negras, balanceadas como a árvore AVL que você constrói no passo dois. SortedList<TKey,TValue> é um par de arrays mantidos na ordem das chaves e, desde o .NET 6, PriorityQueue<TElement,TPriority> é um min-heap baseado em array. Não existe classe de trie nem de grafo; essas estruturas você mesmo escreve.
Em C#, um nó de árvore ou de lista deve ser uma classe ou uma struct?
Uma classe. Uma struct é um tipo de valor: ela não pode conter um campo do próprio tipo de jeito nenhum e, onde quer que seja copiada, uma mudança na cópia deixa o original intacto. Uma instância de classe é uma referência, então os nós podem apontar uns para os outros do jeito que uma lista ligada ou uma árvore precisa. Deixe as structs para valores pequenos, como uma coordenada de grade ou uma aresta com peso.
O C# tem fila de prioridade?
Desde o .NET 6, sim: PriorityQueue<TElement,TPriority>, um min-heap baseado em array em que cada elemento entra na fila com a sua própria prioridade; passe um IComparer<TPriority> que inverta a ordem para ter um max-heap. O .NET Framework e os runtimes mais antigos não têm nenhuma, e é por isso que, por muito tempo, desenvolvedores C# escreveram o próprio heap ou adaptaram um SortedSet<T> para fazer esse papel, e é por isso que saber escrever um ainda importa. O passo dois é onde você faz isso.
Quais cursos desta trilha não são ensinados em C#?
Três: programação dinâmica e a série de entrevistas em Python, ensinadas em Python, e manipulação de bits, ensinada em C++. Eles aparecem listados depois dos passos, cada um com um link que o abre na própria linguagem. Uma tabela de memoização em C# é um array ou um Dictionary, e os truques com bits se traduzem sem atrito, até na distinção que o C++ faz: >> preserva o sinal em um int e preenche com zeros em um uint.
Preciso saber C# antes de começar esta trilha?
Classes, métodos, arrays, laços e coleções genéricas como List<T>, no mínimo. Se isso for novidade, o curso de C# da Coddy te leva até esse ponto primeiro, de graça, e esta trilha continua de onde ele termina.