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.
Temel işlemler:
push: Tepeye ekleme
pop: Tepeden çıkarma
peek: Tepedeki elemana bakma
Kuyruk Ve Yığın Karşılaştırması
| 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.
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
| 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ı
| 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.