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!