KOD DERSLERİ

Veri Yapıları ve Veri Modelleri

Veri yapıları, bilgisayar bilimlerinin en temel konularından biridir. Verilerin bilgisayar belleğinde nasıl organize edileceği, nasıl depolanacağı ve nasıl işleneceği konularını ele alır. Doğru veri yapısı seçimi, yazılımın performansını, bellek kullanımını ve genel verimliliğini doğrudan etkiler.

Bu makalede, temel veri yapılarından ileri düzey veri yapılarına kadar geniş bir yelpazede inceleme yapacak, her bir yapının avantajlarını, dezavantajlarını ve kullanım senaryolarını detaylı olarak ele alacağız.

Veri Yapıları Genel Bakış

Temel Kavramlar ve Terminoloji

Veri Yapısı Terimleri
  • Düğüm (Node): Veri yapısındaki her bir eleman
  • Pointer (İşaretçi): Bir düğümden diğerine referans
  • Kök (Root): Ağaç yapısının başlangıç noktası
  • Yaprak (Leaf): Alt elemanı olmayan düğüm
  • Derinlik (Depth): Bir düğümün köke olan uzaklığı
Karmaşıklık Analizi Terimleri
  • Big O Notation: Algoritma performans ölçümü
  • Time Complexity: Zaman karmaşıklığı
  • Space Complexity: Alan karmaşıklığı
  • Best Case: En iyi durum senaryosu
  • Worst Case: En kötü durum senaryosu

1. Diziler (Arrays)

Diziler ve Çeşitleri

Dizi Türleri
1.1 Tek Boyutlu Diziler
// C++ örneği
int arr[5] = {1, 2, 3, 4, 5};

// Java örneği
int[] arr = new int[5];
                                    
1.2 Çok Boyutlu Diziler
// 2D Array örneği
int matrix[3][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
                                    
1.3 Dinamik Diziler
// C++ vector örneği
vector dynamicArray;
dynamicArray.push_back(1);
                                    
İşlem Karmaşıklık Açıklama
Erişim O(1) İndeks ile doğrudan erişim
Arama O(n) Sıralı olmayan dizide lineer arama
Ekleme O(n) Araya ekleme durumunda kaydırma gerekir
Silme O(n) Silme sonrası kaydırma gerekir
Kullanım Senaryoları:
  • Matris işlemleri
  • Görüntü işleme
  • Oyun programlama (2D/3D koordinat sistemleri)
  • Veritabanı indeksleme

2. Bağlı Listeler (Linked Lists)

Bağlı Liste Yapıları

2.1 Tek Yönlü Bağlı Liste
Tek Yönlü Bağlı Liste
class Node {
    int data;
    Node next;
    
    Node(int d) {
        data = d;
        next = null;
    }
}
                                    
2.2 Çift Yönlü Bağlı Liste
Çift Yönlü Bağlı Liste
class Node {
    int data;
    Node prev;
    Node next;
    
    Node(int d) {
        data = d;
        prev = null;
        next = null;
    }
}
                                    
2.3 Dairesel Bağlı Liste

Dairesel bağlı listelerde son düğüm ilk düğüme bağlanır. Bu yapı özellikle döngüsel işlemlerde kullanışlıdır.

Kullanım Alanları:
  • İşletim sistemi görev zamanlayıcısı
  • Oyun programlamada tur sırası
  • Müzik çalar playlist yapısı
Dairesel Bağlı Liste
Bağlı Liste Operasyonları
Operasyon Kod Örneği Karmaşıklık
Başa Ekleme
newNode.next = head; head = newNode;
O(1)
Sona Ekleme
current.next = newNode;
O(n)
Araya Ekleme
newNode.next = current.next; current.next = newNode;
O(n)

3. Yığınlar ve Kuyruklar

Yığın (Stack)
Yığın
  • LIFO prensibi
  • Push/Pop işlemleri
  • Geri alma işlemleri
Kuyruk (Queue)
Kuyruk
  • FIFO prensibi
  • Enqueue/Dequeue
  • İşlem sıralaması

4. Ağaçlar ve Graflar

Ağaç ve Graf
Ağaç Yapıları:
  • İkili Ağaç
  • AVL Ağacı
  • B-Ağacı
Graf Türleri:
  • Yönlü Graf
  • Yönsüz Graf
  • Ağırlıklı Graf

Veri Modelleri

Model Türü Özellikleri Kullanım Alanları Örnekler
İlişkisel Model
  • Tablo yapısı
  • İlişkiler ve anahtarlar
  • ACID özellikleri
Bankacılık, ERP sistemleri MySQL, PostgreSQL
NoSQL Model
  • Esnek şema
  • Yatay ölçeklenebilirlik
  • Yüksek performans
Büyük veri, Gerçek zamanlı sistemler MongoDB, Cassandra
Hiyerarşik Model
  • Ağaç yapısı
  • Parent-child ilişkisi
  • Tek yönlü ilişki
Dosya sistemleri, XML IMS, XML veritabanları

Veri Yapıları ve Algoritma İlişkisi

Yaygın Algoritmalar ve Uygun Veri Yapıları
Algoritma Veri Yapısı
Arama Algoritmaları İkili Ağaç, Hash Tablosu
Graf Algoritmaları Komşuluk Matrisi, Komşuluk Listesi
Sıralama Algoritmaları Dizi, Bağlı Liste
Algoritma Karmaşıklığı

Uygulama Örnekleri

Web Uygulamaları

  • Oturum yönetimi: Hash tabloları
  • Sayfa geçmişi: Yığın yapısı
  • İstek kuyruğu: Kuyruk yapısı

Veritabanı Sistemleri

  • İndeksleme: B-Ağaçları
  • Sorgu optimizasyonu: Graf yapıları
  • Önbellek: LRU Cache (Hash + Bağlı Liste)