Eignet sich C# für Datenstrukturen und Algorithmen?
Ja. Es liest sich ähnlich wie Java: Typen machen jeden Knoten, jede Referenz und jeden generischen Parameter explizit, und System.Collections.Generic deckt die meisten Strukturen auf diesem Pfad ab. Zwei Gewohnheiten lohnen sich von Anfang an. LINQ ist knapp, aber jedes OrderBy ist eine Sortierung und jedes Where eine Schleife, also verbirgt es die Kosten, die du zu zählen lernst; und Array.Sort ist nicht stabil, was immer dann zählt, wenn gleiche Schlüssel ihre Reihenfolge behalten müssen.
Welche .NET-Collections entsprechen welchen Datenstrukturen?
List<T> ist ein dynamisches Array, Stack<T> und Queue<T> basieren auf Arrays, LinkedList<T> ist eine doppelt verkettete Liste, Dictionary<TKey,TValue> und HashSet<T> sind Hashtabellen, und SortedDictionary<TKey,TValue> und SortedSet<T> sind Rot-Schwarz-Bäume, balanciert wie der AVL-Baum, den du in Schritt zwei baust. SortedList<TKey,TValue> ist ein Paar von Arrays, das nach Schlüsseln sortiert gehalten wird, und seit .NET 6 ist PriorityQueue<TElement,TPriority> ein Min-Heap auf Array-Basis. Eine Trie- oder Graph-Klasse gibt es nicht; die schreibst du selbst.
Sollte ein Baum- oder Listenknoten in C# eine Klasse oder ein Struct sein?
Eine Klasse. Ein struct ist ein Werttyp: Er kann überhaupt kein Feld seines eigenen Typs enthalten, und wo immer er kopiert wird, lässt eine Änderung an der Kopie das Original unberührt. Eine Klasseninstanz ist eine Referenz, also können Knoten aufeinander zeigen, wie es eine verkettete Liste oder ein Baum braucht. Structs nimmst du besser für kleine Werte, etwa eine Gitterkoordinate oder eine gewichtete Kante.
Hat C# eine Prioritätswarteschlange?
Seit .NET 6 ja: PriorityQueue<TElement,TPriority>, ein Min-Heap auf Array-Basis, in den jedes Element mit seiner eigenen Priorität eingereiht wird; übergib einen IComparer<TPriority>, der die Reihenfolge umkehrt, und du bekommst einen Max-Heap. .NET Framework und ältere Runtimes haben keine, weshalb C#-Entwickler lange ihren eigenen Heap geschrieben oder ein SortedSet<T> zu einem umgebogen haben, und weshalb es immer noch zählt, einen schreiben zu können. In Schritt zwei tust du das.
Welche Kurse auf diesem Pfad werden nicht in C# unterrichtet?
Drei: Dynamische Programmierung und die Python-Interviewreihe werden in Python unterrichtet, Bitmanipulation in C++. Sie sind nach den Schritten aufgeführt, jeweils mit einem Link, der den Kurs in seiner eigenen Sprache öffnet. Eine Memo-Tabelle ist in C# ein Array oder ein Dictionary, und Bit-Tricks lassen sich sauber übertragen, bis hin zu der Unterscheidung, die auch C++ macht: >> behält bei einem int das Vorzeichen und füllt bei einem uint mit Nullen auf.
Muss ich C# können, bevor ich mit diesem Pfad anfange?
Mindestens Klassen, Methoden, Arrays, Schleifen und generische Collections wie List<T>. Wenn das neu für dich ist, bringt dich Coddys C#-Kurs zuerst dorthin, kostenlos, und dieser Pfad setzt dort an, wo er endet.