Yetkin ve başarıya ulaşmış bir programcı olmanın yolu zor olsa gerek, sadece kesinlikle ulaşılabilir bir yoldur. Veri yapıları, her programlama öğrencisinin ustalaşı olması ihtiyaç duyulan temel bir bileşendir ve diziler yada listeler benzer biçimde bazı temel veri yapılarını esasen öğrenmiş yada bunlarla çalışmış olabilirsiniz.
Görüşmeciler veri yapılarla ilgili sorular sormayı tercih etme eğilimindedir, bu yüzden bir iş görüşmesine hazırlanıyorsanız, veri yapıları bilginizi tazelemeniz gerekir. Programcılar ve iş görüşmeleri için en mühim veri yapılarını listelerken okumaya devam edin.
1. Bağlantılı Sıralama
Bağlantılı listeler en temel veri yapılarından biridir ve bir çok veri yapısı kursundaki öğrenciler için çoğu zaman başlangıç noktasıdır. Bağlantılı listeler, sıralı veri erişimine müsaade eden doğrusal veri yapılarıdır.
Bağlantılı listedeki öğeler, işaretçiler kullanılarak bağlanan (bağlı) tek tek düğümlerde depolanır. Bağlantılı bir listeyi, değişik işaretçiler vesilesiyle birbirine bağlı düğümler zinciri olarak düşünebilirsiniz.
Değişik bağlantılı sıralama türlerinin özelliklerine girmeden ilkin, tek tek düğümün yapısını ve uygulamasını idrak etmek oldukca önemlidir. Bağlantılı listedeki her düğümün, listedeki bir sonraki düğüme ve veri öğesinin kendisine bağlayan minimum bir işaretçisi (iki kez bağlı sıralama düğümlerinin iki işaretçisi vardır) vardır.
Her bağlantılı listenin bir baş ve kuyruk düğümü vardır. Tek bağlantılı sıralama düğümlerinde, zincirdeki bir sonraki düğümü gösteren yalnızca bir işaretçi vardır. Sonraki işaretçiye ek olarak, iki kat bağlantılı sıralama düğümlerinin zincirdeki önceki düğümü gösteren başka bir işaretçisi vardır.
Bağlantılı listelerle ilgili mülakat soruları çoğu zaman belirli bir öğenin eklenmesi, aranması yada silinmesi çevresinde döner. Bağlantılı bir listeye ekleme O(1) süre alır, sadece silme ve arama en fena durumda O(n) süre alabilir. Kısaca bağlantılı listeler ideal değildir.
2. İkili Ağaç
İkili ağaçlar, ağaç ailesi veri yapısının en popüler alt kümesidir; ikili ağaçtaki öğeler bir hiyerarşide düzenlenir. Öteki ağaç türleri AVL, kırmızı-siyah, B ağaçları vb. İkili ağacın düğümleri veri öğesini ve her alt düğüm için iki işaretçi ihtiva eder.
İkili ağaçtaki her üst düğüm en fazla iki alt düğüme haiz olabilir ve her alt düğüm de iki düğümün üst öğesi olabilir.
İkili arama ağacı (BST), verileri, üst düğümden daha minik anahtar değerine haiz öğelerin solda depolandığı ve anahtar kıymeti üst düğümden büyük öğelerin sağda depolandığı sıralanmış bir düzende depolar.
İkili ağaçlar çoğu zaman röportajlarda sorulmaktadır, bu yüzden bir röportaja hazırlanıyorsanız, ikili bir ağacı iyi mi düzleştirebileceğinizi, belirli bir öğeyi iyi mi arayabileceğinizi ve daha fazlasını bilmelisiniz.
3. Karma Tablo
Fotoğraf Kredisi: Wikimedia Commons
Karma tablolar yada karma haritalar, verileri dizi biçiminde depolayan son aşama verimli bir veri yapısıdır. Her veri öğesine karma tabloda, verimli arama ve silme elde eden benzersiz bir dizin kıymeti atanır.
Karma eşlemede anahtar atama yada eşleme işlemine karma denir. Karma işlevi ne kadar verimli olursa, karma tablonun kendisinin verimliliği de o denli iyi olur.
Her karma tablo, veri öğelerini bir kıymet dizini çiftinde depolar.
Burada kıymet depolanacak verilerdir ve dizin, öğeyi tabloya eşlemek için kullanılan benzersiz tamsayıdır. Karma işlevler, karma tablonun lüzumlu verimliliğine ve çakışmaları iyi mi çözeceğinize bağlı olarak oldukca karmaşık yada oldukca kolay olabilir.
Çakışmalar çoğu zaman karma işlev değişik öğeler için aynı eşlemeyi ürettiğinde ortaya çıkar; karma harita çakışmaları, açık adresleme yada zincirleme kullanılarak değişik şekillerde çözülebilir.
Karma tablolar yada karma haritalar, şifreleme de dahil olmak suretiyle çeşitli değişik uygulamalara haizdir. Ekleme yada durağan(durgun) O(1) zamanında arama gerektiğinde ilk tercih veri yapısıdır.
4. Yığınlar
Yığınlar daha kolay veri yapılarından biridir ve ustalaşmak oldukça kolaydır. Yığın veri yapısı aslına bakarsak herhangi bir gerçek yaşam yığınıdır (kutu yada plaka yığınını düşünün) ve LIFO (Last In First Out) şekilde çalışır.
Stacks’in LIFO özelliği, son olarak eklediğiniz öğeye ilkin erişileceği anlamına gelir. Üstündeki öğeleri patlatmadan bir yığındaki üst öğenin altındaki öğelere erişemezsiniz.
Yığınların itme ve pop olmak suretiyle iki birincil işlemi vardır. Push yığına bir unsur eklemek için kullanılır ve pop yığından en üstteki öğeyi kaldırır.
Ek olarak birçok yararlı uygulamaları vardır, bu yüzden görüşmecilerin yığınlarla ilgili sorular sorması oldukca yaygındır. Bir yığının iyi mi tersine çevrileceğini ve ifadelerin iyi mi değerlendirileceğini bilmek oldukça önemlidir.
5. Kuyruklar
Fotoğraf Kredisi: Vikipedi
Kuyruklar yığınlara benzer, sadece FIFO (İlk Çıkanda) şekilde çalışır, kısaca daha ilkin eklediğiniz öğelere erişebilirsiniz. Kuyruk veri yapısı, insanların varış sırasına bakılırsa konumlandığı herhangi bir gerçek yaşam kuyruğu olarak görselleştirilebilir.
Bir sıranın ekleme işlemine sıra adı verilir ve sıranın başından bir öğeyi silme/kaldırma, sıralama olarak adlandırılır.
Öncelik sıraları, CPU zamanlaması benzer biçimde birçok mühim uygulamada sıraların ayrılmaz bir uygulamasıdır. Öncelik esnasında, öğeler varış sırası yerine önceliklerine bakılırsa sıralanır.
6. Yığınlar
Yığınlar, düğümlerin artan yada azalan sırada düzenlenmiş olduğu bir ikili ağaç türüdür. Min Yığında, üst öğenin anahtar kıymeti alt öğelerine eşit yada daha azdır ve kök düğüm tüm yığının en düşük kıymetini ihtiva eder.
Benzer şekilde, Bir Max Yığınının kök düğümü yığının en büyük anahtar kıymetini ihtiva eder; yığın süresince min/max yığın hususi durumunu korumanız gerekir.
Yığınlar, oldukca verimli doğası sebebiyle birçok uygulamaya haizdir; ilk olarak, öncelik sıraları çoğu zaman yığınlar vesilesiyle uygulanır. Ek olarak yığın algoritmalarında çekirdek bir bileşendir.
Veri Yapılarını Öğrenin
Veri yapıları ilk başta üzücü görünebilir, sadece kafi süre ayırabilir ve bu tarz şeyleri pasta kadar kolay bulacaksınız.
Programlamanın dirimsel bir parçasıdırlar ve nerede ise her proje bu tarz şeyleri kullanmanızı gerektirecektir. Belirli bir senaryo için hangi veri yapısının ideal bulunduğunu bilmek önemlidir.