C# est-il adapté aux structures de données et aux algorithmes ?
Oui. Il se lit un peu comme Java : les types rendent explicites chaque nœud, chaque référence et chaque paramètre générique, et System.Collections.Generic couvre la plupart des structures de ce parcours. Deux réflexes valent la peine d'être pris tôt. LINQ est concis, mais chaque OrderBy est un tri et chaque Where une boucle : il masque donc les coûts que tu apprends à compter ; et Array.Sort n'est pas stable, ce qui compte dès que des clés égales doivent garder leur ordre.
Quelles collections .NET correspondent à quelles structures de données ?
List<T> est un tableau dynamique, Stack<T> et Queue<T> reposent sur un tableau, LinkedList<T> est une liste doublement chaînée, Dictionary<TKey,TValue> et HashSet<T> sont des tables de hachage, et SortedDictionary<TKey,TValue> et SortedSet<T> sont des arbres rouge-noir, équilibrés comme l'arbre AVL que tu construis à l'étape deux. SortedList<TKey,TValue> est une paire de tableaux maintenus dans l'ordre des clés, et depuis .NET 6, PriorityQueue<TElement,TPriority> est un tas-min reposant sur un tableau. Il n'existe pas de classe pour les tries ou les graphes ; ceux-là, tu les écris toi-même.
En C#, un nœud d'arbre ou de liste doit-il être une classe ou une struct ?
Une classe. Une struct est un type valeur : elle ne peut pas du tout contenir de champ de son propre type, et partout où elle est copiée, modifier la copie laisse l'original intact. Une instance de classe est une référence, donc les nœuds peuvent pointer les uns vers les autres, comme l'exige une liste chaînée ou un arbre. Garde les structs pour les petites valeurs, comme une coordonnée de grille ou une arête pondérée.
C# a-t-il une file de priorité ?
Depuis .NET 6, oui : PriorityQueue<TElement,TPriority>, un tas-min reposant sur un tableau, dans lequel chaque élément est mis en file avec sa propre priorité ; passe un IComparer<TPriority> qui inverse l'ordre pour obtenir un tas-max. .NET Framework et les runtimes plus anciens n'en ont pas, et c'est pourquoi les développeurs C# ont longtemps écrit leur propre tas ou détourné un SortedSet<T> pour en faire un, et pourquoi savoir en écrire un compte encore. C'est à l'étape deux que tu le fais.
Quels cours de ce parcours ne sont pas enseignés en C# ?
Trois : la programmation dynamique et la série d'entretiens en Python, enseignées en Python, et la manipulation de bits, enseignée en C++. Ces trois cours figurent après les étapes, chacun avec un lien qui l'ouvre dans son propre langage. En C#, une table de mémoïsation est un tableau ou un Dictionary, et les astuces sur les bits se transposent proprement, jusqu'à la distinction que fait C++ : >> conserve le signe sur un int et remplit de zéros sur un uint.
Faut-il connaître C# avant de commencer ce parcours ?
Au minimum les classes, les méthodes, les tableaux, les boucles et les collections génériques comme List<T>. Si c'est nouveau pour toi, le cours C# de Coddy t'y amène d'abord, gratuitement, et ce parcours prend le relais là où il s'arrête.