C# veri yapıları ve algoritmalar için iyi mi?
Evet. Java'ya çok benzer okunur: tipler her düğümü, referansı ve generic parametreyi açıkça gösterir, System.Collections.Generic de bu yoldaki yapıların çoğunu kapsar. Erkenden kazanmaya değer iki alışkanlık var. LINQ kısadır, ama her OrderBy bir sıralama, her Where bir döngüdür; yani saymayı öğrendiğin maliyetleri gizler. Array.Sort ise kararlı değildir ve eşit anahtarların sırasını koruması gereken her durumda bu önemlidir.
Hangi .NET koleksiyonu hangi veri yapısına karşılık gelir?
List<T> dinamik bir dizidir, Stack<T> ve Queue<T> dizi tabanlıdır, LinkedList<T> çift yönlü bir bağlı listedir, Dictionary<TKey,TValue> ve HashSet<T> hash tablolarıdır, SortedDictionary<TKey,TValue> ve SortedSet<T> ise kırmızı-siyah ağaçlardır; ikinci adımda kurduğun AVL ağacı gibi dengelidirler. SortedList<TKey,TValue> anahtar sırasına göre tutulan iki diziden oluşur; .NET 6'dan beri var olan PriorityQueue<TElement,TPriority> ise dizi tabanlı bir min-heap'tir. Trie ya da graf sınıfı yok; onları kendin yazarsın.
C#'ta bir ağaç ya da liste düğümü sınıf mı olmalı, struct mı?
Sınıf. Bir struct değer tipidir: kendi tipinde bir alanı hiç içeremez ve nerede kopyalanırsa kopyalansın, kopyada yapılan bir değişiklik orijinale dokunmaz. Bir sınıf örneği ise bir referanstır; bu yüzden düğümler, bir bağlı listenin ya da ağacın ihtiyaç duyduğu şekilde birbirine işaret edebilir. Struct'ları bir ızgara koordinatı ya da ağırlıklı bir kenar gibi küçük değerlere sakla.
C#'ta öncelik kuyruğu var mı?
.NET 6'dan beri evet: PriorityQueue<TElement,TPriority>, her elemanın kendi önceliğiyle kuyruğa eklendiği, dizi tabanlı bir min-heap. Max-heap elde etmek için sıralamayı tersine çeviren bir IComparer<TPriority> ver. .NET Framework'te ve eski runtime'larda hiç yok; C# geliştiricilerinin uzun süre kendi heap'lerini yazmasının ya da bir SortedSet<T> koleksiyonunu zorlayarak heap'e çevirmesinin nedeni bu; bir heap yazabilmenin hâlâ önemli olmasının nedeni de. Bunu ikinci adımda yaparsın.
Bu yoldaki hangi kurslar C# ile anlatılmıyor?
Üç kurs: Python ile anlatılan dinamik programlama ve Python mülakat serisi, C++ ile anlatılan bit işlemleri. Adımlardan sonra listelenirler ve her birinin bağlantısı onu kendi dilinde açar. C#'ta bir memo tablosu bir dizi ya da bir Dictionary olur; bit hileleri de, C++'ın yaptığı ayrım dahil, sorunsuz aktarılır: >> bir int üzerinde işareti korur, bir uint üzerinde ise sıfırlarla doldurur.
Bu yola başlamadan önce C# bilmem gerekiyor mu?
En azından sınıflar, metotlar, diziler, döngüler ve List<T> gibi generic koleksiyonlar. Bunlar sana yeniyse, Coddy'nin C# kursu seni önce oraya ücretsiz olarak getirir ve bu yol onun bittiği yerden devam eder.