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!