Czy C# nadaje się do nauki algorytmów i struktur danych?
Tak. Czyta się go podobnie jak Javę: typy sprawiają, że każdy węzeł, referencja i parametr generyczny są jawne, a System.Collections.Generic obejmuje większość struktur z tej ścieżki. Warto wcześnie wyrobić sobie dwa nawyki. LINQ jest zwięzły, ale każde OrderBy to sortowanie, a każde Where to pętla, więc ukrywa koszty, których liczenia się uczysz. Z kolei Array.Sort jest niestabilne, co ma znaczenie zawsze, gdy równe klucze muszą zachować kolejność.
Które kolekcje .NET odpowiadają którym strukturom danych?
List<T> to tablica dynamiczna, Stack<T> i Queue<T> są oparte na tablicach, LinkedList<T> to lista dwukierunkowa, Dictionary<TKey,TValue> i HashSet<T> to tablice mieszające, a SortedDictionary<TKey,TValue> i SortedSet<T> to drzewa czerwono-czarne, zrównoważone jak drzewo AVL budowane w kroku drugim. SortedList<TKey,TValue> to para tablic utrzymywanych w kolejności kluczy, a od .NET 6 PriorityQueue<TElement,TPriority> to kopiec minimalny oparty na tablicy. Nie ma klasy dla drzewa trie ani grafu, te trzeba napisać samodzielnie.
Czy węzeł drzewa albo listy w C# powinien być klasą, czy strukturą?
Klasą. struct to typ wartościowy: w ogóle nie może zawierać pola własnego typu, a gdziekolwiek zostanie skopiowany, zmiana kopii nie wpływa na oryginał. Instancja klasy jest referencją, więc węzły mogą wskazywać na siebie nawzajem, tak jak wymaga tego lista wiązana czy drzewo. Struktury zostaw dla małych wartości, takich jak współrzędne na siatce czy krawędź z wagą.
Czy C# ma kolejkę priorytetową?
Od .NET 6 tak: PriorityQueue<TElement,TPriority>, kopiec minimalny oparty na tablicy, w którym każdy element trafia do kolejki z własnym priorytetem. Żeby uzyskać kopiec maksymalny, przekaż IComparer<TPriority> odwracający kolejność. .NET Framework i starsze środowiska nie mają żadnej, dlatego programiści C# długo pisali własny kopiec albo naginali do tej roli SortedSet<T>, i dlatego umiejętność napisania go wciąż się liczy. Robisz to w kroku drugim.
Które kursy z tej ścieżki nie są prowadzone w C#?
Trzy: programowanie dynamiczne i seria rekrutacyjna w Pythonie, prowadzone w Pythonie, oraz operacje na bitach, prowadzone w C++. Są wymienione po krokach, każdy z linkiem, który otwiera go w jego własnym języku. Tablica memoizacji w C# to tablica albo Dictionary, a sztuczki bitowe przenoszą się bez problemu, łącznie z rozróżnieniem, które robi C++: >> zachowuje znak w int i wypełnia zerami w uint.
Czy muszę znać C#, zanim zacznę tę ścieżkę?
Przynajmniej klasy, metody, tablice, pętle i kolekcje generyczne, takie jak List<T>. Jeśli to dla ciebie nowość, kurs C# w Coddy najpierw cię tam doprowadzi, za darmo, a ta ścieżka zaczyna się tam, gdzie on się kończy.