Veri yapıları nedir? Temel türler ve ne zaman hangisi
Veri yapıları, verinin bellekte düzenlenme ve erişilme biçimidir. Liste, yığın, kuyruk, karma tablo, ağaç ve çizge: ne işe yarar, ne zaman seçilir.
Veri yapıları nedir?
Veri yapısı, verinin bir programın içinde nasıl düzenlenip saklandığını ve bu veri üzerinde hangi işlemlerin ne kadar hızlı yapılabildiğini tanımlayan düzendir. Bir kitaplığı düşünün: kitaplar alfabetik dizilirse aradığınızı bulmak kolaylaşır, rastgele yığılırsa ekleme kolaydır ama arama zorlaşır. Veri yapıları bu ödünleşimleri yazılımda yönetir.
İyi bir veri yapısı seçimi, programın hızını, bellek kullanımını ve okunabilirliğini doğrudan etkiler. Algoritmalar ise bu yapılar üzerinde çalışan adım adım çözüm yöntemleridir; ikisi birbirini tamamlar.
Doğrusal yapılar: dizi, bağlı liste, yığın, kuyruk
Doğrusal yapılarda elemanlar bir sıra içinde tutulur ve çoğunlukla bu sıraya göre işlenir.
- Dizi ve liste: elemanları sıra numarasıyla tutar. Sıra numarasıyla erişim hızlıdır, ortaya eleman eklemek ise elemanları kaydırmayı gerektirebilir. Python'da liste bu amaçla kullanılır.
- Bağlı liste: her eleman bir sonrakine işaret eder. Eklemek ve silmek kolaydır, belirli sıradaki elemana erişmek için baştan gezmek gerekir.
- Yığın (stack): son giren ilk çıkar. Bir tabak yığını gibi çalışır; geri al düğmesi ve fonksiyon çağrı sırası tipik örnektir.
- Kuyruk (queue): ilk giren ilk çıkar. Yazıcı sırası ya da iş emri kuyruğu gibi sırayla işlenmesi gereken işlerde kullanılır.
Karma tablo, ağaç ve çizge
- Karma tablo (hash table): anahtar ile değeri eşleştirir ve anahtarla çok hızlı erişim sağlar. Python'da sözlük (dict) bu mantıkla çalışır; müşteri numarasından müşteri bilgisine ulaşmak tipik örnektir.
- Küme (set): tekrar eden elemanları eler ve üyelik sorgusunu hızlandırır.
- Ağaç: hiyerarşik ilişkiyi gösterir. Dosya sistemi ya da kuruluş şeması gibi. İkili arama ağacı, sıralı veriyi hızlı aramaya olanak verir.
- Çizge (graph): düğümler ve aralarındaki bağlantılardan oluşur. Harita rotaları, sosyal ağlar ve bağımlılık ilişkileri çizgeyle modellenir.
Bu yapılar daha karmaşık veri ilişkilerinde devreye girer.
Doğru veri yapısı nasıl seçilir?
Seçim, programın en sık yaptığı işleme bağlıdır. Şu sorular yol gösterir:
- Veriye anahtarla mı, sırayla mı erişilecek? Anahtarla erişimde karma tablo, sıralı erişimde liste.
- Ekleme ve silme sık mı? Sıkse bağlı liste ya da kuyruk düşünülür.
- Son eklenen önce mi işlenecek? Yığın.
- Veride hiyerarşi ya da ağ ilişkisi var mı? Ağaç ya da çizge.
- Veri sürekli sıralı tutulacak mı? Ağaç tabanlı yapılar.
Bu karşılaştırmaları yapabilmek için zaman ve bellek karmaşıklığı kavramı bilinmelidir; karmaşıklık analizi, bir işlemin veri büyüdükçe nasıl yavaşladığını ifade eder.
Örnek: destek talebi sistemi
Örneğin bir şirketin müşteri destek talebi sistemini yazdığınızı düşünün. Gelen talepler sırayla işlenecekse kuyruk doğal seçimdir. Her müşterinin geçmiş taleplerine hızlıca ulaşmak için müşteri numarasını anahtar alan bir karma tablo kurulabilir.
Talepler kategori alt kategori şeklinde hiyerarşik tutulacaksa ağaç kullanılır. Talep yönlendirmede ekipler arası bağımlılık varsa çizge kullanılabilir. Tek bir sistem içinde farklı ihtiyaçlar için farklı veri yapıları birlikte çalışır.
Yanlış seçim hemen fark edilmez; veri büyüdükçe sorgular yavaşlar ve sistem darboğaza girer.
Veri yapıları öğrenirken sık yapılan hatalar
- Ezberlemek: yapıların adını bilmek yeterli değildir; hangi işlemde hangisinin neduygun olduğunu anlamak gerekir.
- Hazır kütüphanelere körü körüne güvenmek: arkada ne olduğunu bilmeyen biri performans sorunlarını teşhis edemez.
- Karmaşıklığı atlamak: verinin büyümesiyle işlemlerin nasıl yavaşladığını görmeden yapı seçimi tahmine dayanır.
- Uygulamadan öğrenmeye çalışmak: yığın ve kuyruğu kendi elinizle kodlamak kavramı pekiştirir.
İyi bir sıra şudur: önce dizi ve liste, sonra yığın ve kuyruk, ardından karma tablo, ağaç ve çizge.
Mindset programlarında veri yapıları
Veri Yapıları ve Algoritmalar programı Karmaşıklık Analizi ve Temel Yapılar, Yığın, Kuyruk ve Karma Tablolar, Ağaç Yapıları ile Çizge Algoritmaları modüllerini içerir. Python ile Programlama Eğitiminde ise Veri Yapıları başlıklı bir ders bulunur.
Bu modüller, yapıları kavramdan uygulamaya taşımak ve karmaşıklık mantığıyla seçim yapmayı öğrenmek isteyenler için ilgili başlıklardır.
İlgili Mindset programı
Veri Yapıları ve Algoritmalar
Sık sorulan sorular
Veri yapıları ile algoritmalar arasındaki fark nedir?
Veri yapısı, verinin nasıl düzenlenip saklandığını belirler. Algoritma ise bir problemi çözmek için izlenen adımlardır. Örneğin sıralama bir algoritmadır, sıralanacak veriyi tutan liste ya da ağaç ise veri yapısıdır. İkisi birlikte programın hızını ve bellek kullanımını belirler, bu yüzden genellikle birlikte öğrenilir.
Yığın ile kuyruk arasındaki fark nedir?
Yığında son eklenen eleman ilk çıkar, kuyrukta ilk eklenen eleman ilk çıkar. Yığın geri alma işlemleri ve fonksiyon çağrıları için, kuyruk ise sırayla işlenmesi gereken işler için uygundur. İkisi de eleman ekleme ve çıkarma kuralıyla tanımlanan basit ama çok kullanılan yapılardır.
Veri yapıları için hangi dil seçilmeli?
Kavramlar dilden bağımsızdır. Başlangıçta Python gibi okunaklı bir dil, yapıları hızlı denemek için uygundur. Bellek yönetimini daha yakından görmek isteyenler C ya da Java gibi dillerle de çalışabilir. Önemli olan seçilen dilde yapıları kendi elinizle yazıp sonuçlarını görmektir. Kavram oturduktan sonra diğer dillerdeki karşılıkları kolayca öğrenilir.
Veri yapıları mülakatlarda sorulur mu?
Yazılım geliştirici mülakatlarında sıkça yer alır; çünkü aday sorunu parçalama ve doğru yapıyı seçme becerisini gösterir. Her şirketin içeriği farklıdır, ancak temel yapıların ve karmaşıklık mantığının bilinmesi genel bir beklentidir. Hazırlıkta kavramı anlamak ezberden daha çok işe yarar. Çözüm anlatırken seçilen yapının gerekçesini söylemek ayrıca değerlidir.