Veri Yapıları ve Programlama

13 - Dönem Sonu Özeti

Emre Can Yılmaz

Ondokuz Mayıs Üniversitesi

28 May 2026

Dönem Sonu Özeti

Bu sunumda dönem boyunca gördüğümüz temel konuları kısa biçimde hatırlayacağız.

Ana odak:

  • Veriyi Doğru Temsil Etmek
  • Belleği Doğru Kullanmak
  • Temel Veri Yapılarını Tanımak
  • Arama Ve Sıralama Mantığını Kavramak

Dönem Boyunca İşlenen Konular

  • Veri Yapılarına Giriş
  • Fonksiyonlar, Diziler Ve İşaretçiler
  • Struct, Union Ve Enum
  • Dinamik Bellek Yönetimi
  • Bağlı Listeler
  • Kuyruk
  • Yığın
  • Ağaçlar
  • Sıralama Algoritmaları
  • Arama Algoritmaları

Genel Bağlantı

flowchart TD
    A[İşaretçi] --> B[Dinamik Bellek]
    B --> C[Struct]
    C --> D[Düğüm]
    D --> E[Bağlı Liste]
    D --> F[Kuyruk]
    D --> G[Yığın]
    D --> H[Ağaç]

Veri Yapısı Nedir?

  • Veriyi bellekte belirli bir düzene göre tutma biçimidir.
  • Ekleme, silme, arama ve dolaşma işlemlerini etkiler.
  • Her veri yapısının güçlü ve zayıf yönleri vardır.
  • Doğru seçim, problemin ihtiyacına göre yapılır.

Fonksiyonlar, Diziler Ve İşaretçiler

  • Fonksiyonlar kodu parçalara ayırır.
  • Diziler aynı türden verileri ardışık olarak tutar.
  • İşaretçiler bellek adresi tutar.
  • & adres alma, * adresteki değere erişme için kullanılır.
  • İşaretçiler dinamik veri yapılarının temelidir.

Dizilerde Hatırlanması Gerekenler

  • Dizi indisleri 0dan başlar.
  • Dizi boyutu sabittir.
  • Dizi adı çoğu durumda ilk elemanın adresi gibi davranır.
  • Fonksiyona gönderilen dizide eleman sayısı ayrıca verilmelidir.

İşaretçilerde Hatırlanması Gerekenler

  • İşaretçi bir adres tutar.
  • NULL, geçerli bir adres olmadığını gösterir.
  • İşaretçi kullanılmadan önce geçerli olup olmadığı düşünülmelidir.
  • Yanlış işaretçi kullanımı programın çökmesine neden olabilir.

Struct, Union Ve Enum

  • struct, farklı türden verileri tek bir yapı altında toplar.
  • union, aynı bellek alanını farklı türler için kullanır.
  • enum, anlamlı sabit değer kümeleri tanımlar.
  • Veri yapılarında özellikle struct kullanımı önemlidir.

Struct Ve Düğüm Mantığı

Bağlı liste, kuyruk, yığın ve ağaç gibi yapılarda genellikle düğüm yapısı kullanılır.

struct Node {
    int veri;
    struct Node *sonraki;
};

Bu yapı bir veri ve bir bağlantı bilgisini birlikte tutar.

Dinamik Bellek Yönetimi

  • Program çalışırken bellek ayırmak için kullanılır.
  • malloc, calloc ve realloc bellek ayırır.
  • free, ayrılan belleği geri verir.
  • Bellek ayırma başarısız olabilir.
  • Bu yüzden dönüş değeri kontrol edilmelidir.

Bellek Yönetiminde Sık Hatalar

  • malloc Sonucunu kontrol etmemek
  • Ayrılan belleği free ile geri vermemek
  • free Edilen adresi tekrar kullanmak
  • Aynı adresi iki kez free etmek
  • NULL İşaretçiyi kullanmaya çalışmak

Bağlı Liste

  • Düğümlerden oluşan dinamik bir veri yapısıdır.
  • Her düğüm veri ve sonraki düğümün adresini tutar.
  • Listenin başlangıcı head ile takip edilir.
  • Son düğümün bağlantısı NULL olur.
head → [10] → [20] → [30] → NULL

Bağlı Liste İşlemleri

  • Gezme
  • Arama
  • Başa Ekleme
  • Sona Ekleme
  • Araya Ekleme
  • Silme

Bağlı listede asıl dikkat edilmesi gereken nokta bağlantıların doğru güncellenmesidir.

Başa Ekleme Mantığı

Başa eleman eklerken yeni düğüm listenin yeni başlangıcı olur.

Önce:

head → [20] → [30] → NULL

Sonra:

head → [10] → [20] → [30] → NULL

Bu işlemde head artık yeni düğümü göstermelidir.

Bağlı Listede Kritik Nokta

Bazı işlemlerde head değişebilir.

Örneğin:

  • Boş listeye ilk düğüm eklenirse
  • Listenin başına düğüm eklenirse
  • İlk düğüm silinirse

Bu durumlarda head işaretçisi doğru güncellenmelidir.

Kuyruk

Kuyruk, İlk Giren İlk Çıkar mantığıyla çalışır.

front → [10] → [20] → [30] ← rear

Temel işlemler:

  • enqueue: Sona ekleme
  • dequeue: Baştan çıkarma
  • peek: Baştaki elemana bakma

Kuyrukta Dikkat Edilecekler

  • İlk eleman eklenirken hem front hem rear güncellenir.
  • Son eleman çıkarılırsa kuyruk boş hale gelir.
  • Boş kuyruktan eleman çıkarılamaz.
  • Bağlı liste ile gerçeklendiğinde işaretçi güncellemeleri önemlidir.

Yığın

Yığın, Son Giren İlk Çıkar mantığıyla çalışır.

top

[30]
[20]
[10]

Temel işlemler:

  • push: Tepeye ekleme
  • pop: Tepeden çıkarma
  • peek: Tepedeki elemana bakma

Kuyruk Ve Yığın Karşılaştırması

Özellik Kuyruk Yığın
Temel İlke FIFO LIFO
Ekleme Sondan Tepeden
Çıkarma Baştan Tepeden
Örnek Yazıcı Kuyruğu Geri Alma İşlemi

Ağaç

  • Hiyerarşik bir veri yapısıdır.
  • En üstteki düğüm köktür.
  • Çocuğu olmayan düğümler yapraktır.
  • Her düğüm kendi altında bir alt ağaç oluşturabilir.
        10
       /  \
      5    20

Ağaç Kavramları

  • Kök: En üstteki düğüm
  • Ebeveyn: Altında çocuk düğüm bulunan düğüm
  • Çocuk: Bir düğüme bağlı alt düğüm
  • Yaprak: Çocuğu olmayan düğüm
  • Derinlik: Kökten ilgili düğüme uzaklık
  • Yükseklik: İlgili düğümden en uzak yaprağa uzaklık

İkili Ağaç

İkili ağaçta her düğümün en fazla iki çocuğu vardır.

struct Node {
    int veri;
    struct Node *sol;
    struct Node *sag;
};

Sol ve sağ çocuk yoksa ilgili işaretçi NULL olur.

Sıralama Algoritmaları

Sıralama, verileri belirli bir düzene göre yerleştirme işlemidir.

Bu derste gördüğümüz algoritmalar:

  • Seçerek Sıralama
  • Baloncuk Sıralama
  • Ekleme Sıralaması
  • Hızlı Sıralama
  • Birleştirme Sıralaması

Sıralama Algoritmalarının Temel Fikirleri

Algoritma Temel Fikir Ortalama Durum
Selection Sort En küçük elemanı seçip yerine koyar O(n²)
Bubble Sort Komşu elemanları karşılaştırır O(n²)
Insertion Sort Elemanı sıralı bölüme yerleştirir O(n²)
Quick Sort Böl ve fethet yaklaşımını kullanır O(n log n)
Merge Sort Parçaları sıralayıp birleştirir O(n log n)

Sıralamada Hatırlanması Gerekenler

  • Basit algoritmalar küçük verilerde anlaşılırdır.
  • Büyük verilerde algoritma seçimi daha önemli hale gelir.
  • Quick Sort ve Merge Sort böl ve fethet yaklaşımını kullanır.
  • Merge Sort ek bellek kullanabilir.
  • Quick Sort ortalama durumda hızlıdır.

Arama Algoritmaları

Arama, bir veri kümesinde istenen değeri bulma işlemidir.

Bu derste iki temel arama yaklaşımı gördük:

  • Doğrusal Arama
  • İkili Arama

Doğrusal Arama

Elemanlar baştan sona sırayla kontrol edilir.

Dizi:   2, 4, 0, 1, 9
Aranan: 1

İz:     2 → 4 → 0 → 1
Sonuç:  4. kontrolde bulundu

Sıralı veri gerektirmez.

İkili Arama

İkili arama yalnızca sıralı dizilerde uygulanır.

Dizi:   1, 3, 5, 7, 9, 11
Aranan: 9

1. kontrol: Orta değer 5
            9 daha büyük, sağ yarıya geçilir.

2. kontrol: Orta değer 9
Sonuç:      9 bulundu

Her adımda arama aralığı yaklaşık ikiye bölünür.

Arama Algoritmaları Karşılaştırması

Özellik Doğrusal Arama İkili Arama
Sıralı Veri Gerekir Mi? Hayır Evet
Temel Mantık Baştan sona kontrol Ortadan bölerek ilerleme
En Kötü Durum O(n) O(log n)
Uygulama Daha basit Daha dikkat ister

Sınav Öncesi Kontrol Listesi

Şunları açıklayabiliyor olmalısınız:

  • Dizi ile bağlı liste arasındaki fark nedir?
  • İşaretçi neden önemlidir?
  • Dinamik bellek neden kullanılır?
  • malloc Sonrası neden kontrol yapılır?
  • Bağlı listede head ne zaman değişebilir?
  • Kuyruk ile yığın arasındaki fark nedir?
  • Ağaçta kök, yaprak, derinlik ve yükseklik ne anlama gelir?
  • İkili arama neden sıralı veri ister?

Sık Yapılan Hatalar

  • Dizi boyutunu fonksiyon içinde sizeof ile bulmaya çalışmak
  • NULL Kontrolü yapmadan işaretçi kullanmak
  • Belleği ayırıp geri vermemek
  • Bağlı listede bağlantıları yanlış güncellemek
  • Kuyrukta son eleman çıkınca rear işaretçisini güncellememek
  • İkili aramayı sıralı olmayan dizide kullanmak
  • Derinlik ve yüksekliği karıştırmak

Genel Özet

Bu derste temel olarak şunu gördük:

Veriyi temsil et
Belleği doğru yönet
Bağlantıları doğru kur
İşlem sırasını takip et
Uç durumları kontrol et

Başarılar

Veri yapıları, daha ileri programlama ve algoritma konuları için temel oluşturur.

Bu dersteki asıl amaç, yalnızca kod ezberlemek değil; verinin bellekte nasıl tutulduğunu ve işlemlerin bu yapı üzerinde nasıl ilerlediğini anlamaktır.

Sınavda her soruda önce yapının mantığını, sonra işlem sırasını düşünün.