C ile veri yapıları ve algoritmalar
Dizi, liste, yığın, kuyruk, özet tablosu ve ağaçları C’de sıfırdan yazar, maliyetlerini ölçer ve bellek hatası bırakmadan test edersin.
Seviye 201 · 21 ders · 21 pratik lab
Dersler
Doğrusal yapılar
- Büyüyen dizi: kapasite ve yeniden boyutlama
- Çift bağlı liste: ekleme, silme ve gezinme
- Yığın (stack): dizi ve liste ile
- Kuyruk ve halka tampon
- void* ile genel amaçlı kapsayıcı
- Kısa görev: geri al yığını
Arama ve sıralama
- Karmaşıklık: Büyük O ile maliyeti ölçmek
- qsort ve bsearch ile karşılaştırma işlevleri
- Birleştirmeli sıralamayı yazmak
- Hızlı sıralama ve pivot seçimi
- İkili arama ve sınır hataları
- Kısa görev: üç sıralamayı karşılaştır
Anahtar-değer ve ağaçlar
- Özet işlevleri: FNV-1a ve dağılım
- Zincirlemeli özet tablosu
- Çakışma saldırısına dayanıklı tablo: tohumlu özet
- İkili arama ağacı: ekleme, arama, silme
- Ağaç gezinme: önce, ara ve sonra sıra
- Öbek veri yapısı ve öncelik kuyruğu
- Çizgeler: komşuluk listesi ve genişlik öncelikli arama
- Kısa görev: kelime dizini çıkar
Bitirme
- Bitirme görevi: özet tablosuyla IP sayacı
Pratik lablar
- Büyüyen tamsayı dizisi: Kapasitesi dolunca ikiye katlanan bir tamsayı dizisi yaz; ekleme ve okuma testleri geçsin.
- Telemetri için halka tampon: Son 64 ölçümü tutan ve dolunca en eskisinin üstüne yazan bir halka tampon yaz; sarma sınırlarını test et.
- Yığınla parantez dengesini denetlemek: Bir yapılandırma ifadesindeki (), [] ve {} parantezlerinin dengesini yığın kullanarak denetle ve ilk hatanın konumunu dön.
- Geri ve ileri gezinme geçmişi: İki yığınla geri ve ileri gezinmeyi destekleyen bir geçmiş yapısı yaz; bellek sızıntısı olmasın.
- Sıralı fiyat listesinde bsearch: Ürün koduna göre sıralı bir dizide bsearch ile fiyat bulan fonksiyonu yaz ve bulunamayan kodu test et.
- İkili aramadaki sınır hatasını düzeltmek: Tekrarlanan değerlerde yanlış konum dönen ikili aramayı ilk eşleşmeyi bulacak şekilde düzelt.
- Yavaş sıralamayı birleştirerek sıralamaya çevirmek: Yüz bin kayıtta dakikalar süren eklemeli sıralamayı birleştirerek sıralama ile değiştir ve süreyi ölç.
- Ortancayı tamamen sıralamadan bulmak: Yanıt sürelerinin ortancasını quickselect ile bul; sıralı ve tekrarlı girdilerde de doğru çalışsın.
- FNV-1a ile kova dağılımını ölçmek: FNV-1a özet fonksiyonunu yaz ve bin anahtarın kovalara dağılımını histogram olarak yazdır.
- Zincirli tablodan güvenle silmek: Zincirli bir karma tablosunda silme işlemini yaz; zincirin başındaki ve ortasındaki kayıtlar doğru silinsin.
- Doluluk artınca tabloyu büyütmek: Doluluk oranı 0.75'i geçince kovaları iki katına çıkarıp yeniden dağıtan büyütme işlemini sızıntısız yaz.
- Çakışma saldırısına dayanıklı tablo: Sabit özetli tabloyu rastgele tohumlu özete geçir ve hazır çakışan anahtar listesinin tabloyu yavaşlatmadığını göster.
- İkili arama ağacının yüksekliği: Bir BST'nin en küçük, en büyük değerini ve yüksekliğini dönen özyinelemeli fonksiyonları yaz.
- İki çocuklu düğümü silmek: BST silme fonksiyonunu iki çocuklu düğüm durumu için tamamla ve in-order çıktının sıralı kaldığını test et.
- Öncelik kuyruğuyla görev zamanlamak: Dizi tabanlı bir min-heap ile en yakın zamanlı görevi seçen zamanlayıcı yaz; eşit zamanlarda ekleme sırası korunsun.
- En az atlamalı yolu BFS ile bulmak: Komşuluk listesiyle verilen ağ cihazları arasında en az atlama sayısını BFS ile hesapla.
- Bağlı bileşenleri saymak: Arkadaşlık ilişkilerinden oluşan bir çizgede birbirine bağlı grup sayısını DFS ile bul.
- Derleme sırasını topolojik sıralamayla bulmak: Modül bağımlılıklarından geçerli bir derleme sırası çıkar ve döngü varsa döngüdeki modülleri raporla.
- Büyüyen diziye araya ekleme ve küçülme eklemek: Büyüyen tam sayı dizisine araya ekleme ve silme işlemlerini ekle; doluluk dörtte birin altına inince kapasite yarıya düşsün ve realloc hatasında veri kaybolmasın.
- İlk bozuk sürümü ikiye bölerek bulmak: Sıralı sürüm listesinde testin ilk kez başarısız olduğu sürümü en az sayıda deneme ile bulan fonksiyonu yaz; hiç bozuk sürüm olmaması ve hepsinin bozuk olması durumları da doğru dönsün.
- Kayıtları kararlı biçimde sıralamak: Küçük bir öğrenci kaydı dizisini nota göre eklemeli sıralama ile sırala; aynı nota sahip kayıtlar girdideki sıralarını korusun.
Kurs hakkında
Dizi, liste, yığın, kuyruk, özet tablosu ve ağaçları C’de sıfırdan yazar, maliyetlerini ölçer ve bellek hatası bırakmadan test edersin.
Ne öğreneceksin
- Doğrusal yapılar
- Arama ve sıralama
- Anahtar-değer ve ağaçlar
- Bitirme
Ön koşullar
Aynı yolun 101 düzeyindeki kurslarını bitirmiş olmak ya da o konuları biliyor olmak yeterlidir.
Lab ortamı
Dersler, tarayıcında açılan sana özel bir Kali Linux terminalinde geçer. Kurulum gerekmez; lab her derste temiz başlar.
Sık sorulan sorular
- Bu kurs benim düzeyime uygun mu?
- Kurs 201 düzeyindedir; daha düşük düzeydeki kursların konularını bildiğin varsayılır.
- Kurulum gerekir mi?
- Hayır. Her ders tarayıcında açılan sana özel bir lab ortamında geçer.
- Dersler nasıl işleniyor?
- Her ders 8 ile 10 adımdan ve bir kısa sınavdan oluşur. İlk adımlarda yazman gereken komut gösterilir, sonraki adımlarda yardım azalır; iki denemede takılırsan çözüm açılır.
- Ücretsiz deneyebilir miyim?
- Evet. Her kursun ilk üç dersi ücretsizdir.