Veri Yapıları ve Programlama

13 - Dönem Sonu Özeti

Emre Can Yılmaz

Ondokuz Mayıs Üniversitesi

2025

Dönem Sonu Özeti

Bu sunumda, dönem boyunca işlediğimiz temel Veri Yapıları ve Programlama konularını hızlıca hatırlayacağız.

1. Veri Yapılarına Giriş

  • Verileri organize etme, saklama ve işleme aracıdır.
  • Performans, okunabilirlik ve verimlilik için kritiktir.
  • Temel yapılar: Diziler, Bağlı Listeler, Yığınlar, Kuyruklar, Ağaçlar.

2. Fonksiyonlar, Diziler, İşaretçiler

  • Fonksiyonlar: Modülerlik, kod tekrarını önleme. Prototipler önemlidir.
  • Diziler: Aynı türden veriler, bellekte ardışık. Fonksiyona adresi gider. sizeof ile boyut hesabı.
  • İşaretçiler (Pointers): Bellek adreslerini tutar. * (dereference), & (adres), NULL pointer. Dinamik bellek ve karmaşık yapıların temelidir.

3. Struct ve Union’lar

  • Struct: Farklı veri tiplerini mantıksal bir bütün olarak tutar. Üyelerine . veya -> (işaretçiyle) erişilir. typedef ile takma ad verilir.
  • Union: Aynı bellek alanını farklı tipler için kullanır (tek üye aktif). Bellek tasarrufu sağlar.
  • Enum: Sabit değer kümeleri tanımlar.

4. Dinamik Bellek Yönetimi

  • Program çalışırken bellek ayırma ve iade etme.
  • malloc, calloc, realloc ile bellek ayrılır.
  • free ile ayrılan bellek mutlaka iade edilmelidir.
  • Kritik Hatalar: Bellek sızıntısı (memory leak), sarkan işaretçi (dangling pointer), çift free.
  • Ayırma fonksiyonlarının dönüş değeri (NULL olup olmadığı) kontrol edilmelidir.

5. Bağlı Listeler (Linked Lists)

  • Düğümlerden (veri + sonraki işaretçi) oluşur. Dinamik boyutludur.
  • Türleri: Tek Yönlü, Çift Yönlü, Dairesel.
  • head listenin başını, son düğümün next’i NULL listenin sonunu gösterir.
  • Temel İşlemler: Gezme (Traversal), Ekleme (Insertion), Silme (Deletion), Arama (Search).
  • Ekleme/Silmede head değişebilir, dikkat! (**headRef)

6. Kuyruk (Queue)

  • FIFO (First-In-First-Out) prensibi ile çalışır.
  • İşlemler:
    • enqueue (sona ekleme - rear)
    • dequeue (baştan çıkarma - front)
    • peek (baştakine bakma)
  • head (front) ve tail (rear) işaretçileriyle yönetilir (bağlı liste ile).

7. Yığın (Stack)

  • LIFO (Last-In-First-Out) prensibi ile çalışır.
  • İşlemler:
    • push (tepeye ekleme - top)
    • pop (tepeden çıkarma)
    • peek (tepedekine bakma)
  • Fonksiyon çağrıları (Call Stack), Geri Alma (Undo) gibi uygulamaları vardır.

8. Ağaç (Tree)

  • Doğrusal olmayan, hiyerarşik bir veri yapısıdır.
  • İkili Ağaçlar: Her düğümün en fazla iki çocuğu (sol/sağ) vardır.
  • Temel Kavramlar: Kök (root), Ata (parent), Çocuk (child), Yaprak (leaf), Derinlik (depth), Yükseklik (height).
  • Büyük veri kümelerinde arama ve sıralama için etkilidir.

9. Sıralama Algoritmaları

  • Veri kümelerini belirli bir düzene göre sıralar.
  • Bazı Örnekler:
    • Seçerek Sıralama (Selection Sort)
    • Baloncuk Sıralama (Bubble Sort)
    • Ekleme Sıralama (Insertion Sort)
    • Hızlı Sıralama (Quick Sort) - Böl ve Fethet
    • Birleştirme Sıralama (Merge Sort) - Böl ve Fethet

10. Arama Algoritmaları

  • Veri kümesinde belirli bir elemanı bulur.
  • Doğrusal Arama (Linear Search):
    • Sırayla tüm elemanları kontrol eder.
    • Sıralı olmayan diziler için uygundur.
  • İkili Arama (Binary Search):
    • Sıralı dizi gerektirir.
    • Diziyi her adımda ikiye bölerek arama yapar (çok daha hızlı).

Teşekkürler ve Başarılar!

  • Bu dönem boyunca öğrendikleriniz, yazılım geliştirmenin temelini oluşturuyor.
  • Bol pratik yapmayı ve kavramları pekiştirmeyi unutmayın.
  • Sınavlarınızda ve gelecekteki çalışmalarınızda başarılar!