YZ Destekli Kodlama Notları

Algoritmalar · Ünite 2

Veri Yapıları: Dizi, Bağlı Liste, Yığın, Kuyruk, Ağaç, Çizge

10 soruluk deneme testine geç ↓

1. Veri yapısı nedir?

Veri, bir olgunun, kavramın ya da komutun iletilmeye, yorumlanmaya ve işlenmeye uygun biçimdeki gösterimi. Veri yapısı ise bu veriyi bellekte saklamak, geri çağırmak ve işlemek için kurulan düzen. Kısacası programcının kafasındaki bilgiyle bilgisayarın belleği arasındaki köprü.

Neden gerekli? Not defteri örneği

Bir sınıfın adlarını, matematik ve Türkçe notlarını tutmak istiyorsun. Her öğrenci için ayrı değişken açarsan (isim, mat, tur, isim2, mat2, tur2…) öğrenci sayısı arttıkça işin içinden çıkılmaz; bir öğrencinin adının yanına başkasının notu yazılabilir.

Daha iyisi: üç dizi açmak. Her dizi bir tablonun sütunu, indis de satır numarası gibi düşünülür. İlk öğrencinin bilgileri hep aynı indiste durur: ogrenciler[0], mat[0], tur[0].

İndisÖğrencilerMatematikTürkçe
0Öğrenci 17690
1Öğrenci 22045
2Öğrenci 38067

Gerçek hayatta nerede?

Veri yapıları üzerindeki altı temel işlem

İşlemNe yapar?
Gezinme (traversing)Yapıdaki elemanları tek tek dolaşıp çıktı olarak verir.
Arama (searching)Bir değerin yapıda olup olmadığını bulur.
Ekleme (insertion)İstenen noktaya eleman ekler.
Silme (deletion)İstenen elemanı çıkarır.
Sıralama (sorting)Elemanları bir ölçüte göre dizer.
Birleştirme (merging)Elemanları (ya da iki yapıyı) birleştirir.

Hangi yapıyı seçeceğin, bu işlemlerden hangisini ne sıklıkla yapacağına bağlı. Doğru seçim hem kod yazmayı kolaylaştırır hem de zaman ve alan karmaşıklığını düşürür.

2. Sınıflandırma: basit ve karmaşık

Karmaşık yapıların bir sınıflaması: doğrusallar ayrıca statik ve dinamik diye ikiye ayrılabilir.

3. Basit veri türleri

TürNe tutar?ÖrnekTutamaz
BooleanMantıksal doğru / yanlıştrue, false—
IntegerPozitif ya da negatif tam sayı0, 10, -330000,2
FloatOndalıklı (kayar noktalı) sayı3.14, -2, 9—
CharTek bir karakter (harf, rakam, işaret)a, A, 912 (iki karakter)
Pointer (gösterge)Başka bir değişkenin bellek adresi0x1F4—

Başvuru çizelgesi (lookup table): ağır hesapların (ör. trigonometrik değerler) girdilerini ve sonuçlarını önceden tutan dizi. Hesaplamak yerine tablodan okunur.

4. Doğrusal karmaşık yapılar

Dizi (array)

Aynı türdeki verileri bitişik bellek hücrelerinde tutar; her elemana eşit yer ayrılır (int için 4 bayt). Bu sayede herhangi bir elemanın adresi doğrudan hesaplanır, diğerlerine bakmaya gerek kalmaz. Buna rastgele erişim denir.

adres(i) = ilk elemanın adresi + eleman boyutu × (i − ilk indis)

matNot[2] → 100 + 4 × (2 − 0) = 108

Bağlı liste (linked list)

Birbirine bağlı düğümlerden oluşur. Düğümler bellekte dağınık durur; her düğümde iki parça var: veri ve bir sonraki düğümün adresini tutan gösterge. Son düğümün göstergesi NULL'dır; listenin bittiği böyle anlaşılır.

Üç düğümlü tek yönlü bağlı liste. Alttaki sayılar düğümlerin bellek adresleri.
DiziBağlı liste
BellekBitişikDağınık, her yer kullanılabilir
BoyutSabit, baştan belirlenirÇalışırken büyüyüp küçülür
Erişimİndisle doğrudan (rastgele)Baştan sırayla: 4. eleman için önce ilk 3'ü
Araya ekleme / silmeZor: elemanlar kaydırılırKolay: yalnızca adresler değişir
Ek yükSadece veriVeri + gösterge, daha fazla yer

Yığın (stack) ve kuyruk (queue)

Yığında ekleme ve çıkarma aynı uçtan (tepe), kuyrukta farklı uçlardan yapılır.
Yığın kullanılan yerlerKuyruk kullanılan yerler
Geri al / YineleDisk ve yazıcı işlerinin sırası
Tarayıcı adres geçmişiİşletim sisteminde kesmeler
Metni tersine çevirmeSistemler arası veri aktarımı takibi
Özyinelemeli fonksiyonlar, labirentte gerileme (backtracking)Medya oynatıcı çalma listesi

5. Doğrusal olmayan yapılar

Burada bir elemanın ikiden fazla bağlantısı olabilir; hiyerarşi, çoklu bağlantı ve ağırlıklı bağlantı kurulabilir. Doğrusal yapı tek bir döngüyle gezilirken, burada alt dalları gezmek için yeni döngüler gerekebilir.

Ağaç (tree)

Hiyerarşik veriyi tutar: düğümler sıralı değil katman katman dizilir. Her düğüm, verisinin yanında çocuklarına giden bağlantıları da taşır. Her düğümün en fazla iki çocuğu olan ağaca ikili ağaç (binary tree) denir.

Dört katmanlı ikili ağaç. Kök A; J'nin derinliği 3.
TerimAnlamıŞekilde
Kök (root)En üstteki tek düğümA
Kenar (edge)İki düğümü bağlayan çizgiA–B
Yol (path)Kenarlarla bağlı düğüm serisi; kökten her düğüme tek bir yol varA, B, E, J
Ebeveyn / çocukAşağı doğru kenarı olan düğüm / o kenarın ucundaki düğümB, E'nin ebeveyni
Kardeş (sibling)Aynı ebeveynin çocuklarıH ve I
Yaprak (leaf)Hiç çocuğu olmayan uç düğümH, I, F, G, J
Alt ağaç (subtree)Bir düğüm ve altındakilerD, H, I
Katman (level)Kök 0. katman, çocukları 1. katman…B, C → 1
Derinlik (depth)Kökten o düğüme kadar kenar sayısıJ → 3
Yükseklik (height)Düğümden yaprağa kadar kenar sayısıB → J: 2

Kullanım: dosya sistemleri, sözlükler, yönlendirme tabloları. Kelime işlemcilerin yazım denetimi de Trie adlı bir ağaç kullanır.

Çizge (graph)

Düğümler (vertex) ve onları bağlayan kenarlardan (edge) oluşur; G(V, E) diye yazılır, V düğüm kümesi, E kenar kümesi. Ağaçtan farkı: ebeveyn–çocuk ilişkisi ve katman yok, iki düğüm arasında birden fazla yol olabilir, döngü kurulabilir. Bir kenarla bağlı iki düğüme bitişik denir.

Hepsi bir arada

YapıTürTek cümlede
DiziDoğrusal, statikBitişik, aynı tür, indisle anında erişim.
Bağlı listeDoğrusal, dinamikDağınık düğümler, her biri sonrakini gösterir.
YığınDoğrusal, dinamikLIFO: son giren ilk çıkar.
KuyrukDoğrusal, dinamikFIFO: ilk giren ilk çıkar.
AğaçDoğrusal olmayanTek kök, katmanlar, her düğüme tek yol.
ÇizgeDoğrusal olmayanHiyerarşi yok, çok yol, yönlü / ağırlıklı olabilir.

Kendini test et!

Cevabı görmek için soruya dokun.

  1. 1.Başlangıç adresi 200 olan ve her elemanı 4 bayt olan bir dizide dizi[5] hangi adrestedir? (İlk indis 0)

    ✓ 200 + 4 × 5 = 220.

  2. 2.16 bitlik bir değişken kaç farklı değer tutabilir?

    ✓ 2^16 = 65.536.

  3. 3.Yığına sırayla 3, 8, 5 eklendi, sonra iki kez çıkarma yapıldı. Yığında ne kaldı?

    ✓ Önce 5, sonra 8 çıkar; yığında yalnızca 3 kalır.

  4. 4.Aynı sayılar bir kuyruğa eklenip iki kez çıkarma yapılsaydı ne kalırdı?

    ✓ Önce 3, sonra 8 çıkar; kuyrukta 5 kalır.

  5. 5.Bağlı listede 4. elemana neden doğrudan ulaşılamaz?

    ✓ Düğümler bellekte dağınık; adresi ancak bir önceki düğümün göstergesinden öğrenilir. Bu yüzden baştan sırayla gidilir.

  6. 6.Ağaç ile çizge arasındaki temel fark nedir?

    ✓ Ağaçta tek kök, ebeveyn–çocuk hiyerarşisi ve her düğüme tek yol var. Çizgede hiyerarşi yok; iki düğüm arasında birden fazla yol olabilir.

Deneme testi

Sınavda çıkabilecek türden 10 soru. Bir şık seç; doğru cevap ve açıklaması hemen çıkar.

  1. 1.Aşağıdakilerden hangisi basit (ilkel) veri türü değildir?

  2. 2.Eleman eklemenin ve çıkarmanın aynı uçtan yapıldığı, «Son Giren İlk Çıkar» ilkesiyle çalışan yapı hangisidir?

  3. 3.Bir yazıcıya gönderilen belgelerin geliş sırasına göre basılması için en uygun veri yapısı hangisidir?

  4. 4.7 bitlik ASCII standardında kaç farklı karakter tanımlanabilir?

  5. 5.Başlangıç adresi 100 olan, her elemanı 4 bayt olan bir dizide (ilk indis 0) matNot[3] elemanının adresi kaçtır?

  6. 6.Bağlı listelerin dizilere göre avantajı aşağıdakilerden hangisidir?

  7. 7.Ağaç veri yapısında hiç çocuğu olmayan uç düğümlere ne ad verilir?

  8. 8.Bir ağaçta kök düğümden bir düğüme giden yol üzerindeki kenar sayısına ne denir?

  9. 9.Şehirler arasındaki en kısa yolu bulmak için yolların uzunluklarının kenarlara değer olarak verildiği yapı hangisidir?

  10. 10.Bellekteki başka bir değişkenin adresini saklayan veri türü ve o adresteki değere ulaşma işlemi hangi seçenekte doğru eşleştirilmiştir?

Bu not ders kitabının yerine geçmez; konu kendi cümlelerimizle, yapay zekâ desteğiyle özetlendi.