Bağlı Liste (Linked List), her elemanın (node) bir sonraki elemana işaretçi (pointer) ile bağlandığı dinamik veri yapısıdır. Dizilerden farklı olarak, elemanlar hafızada ardışık olmak zorunda değildir.
🎮 İnteraktif Bağlı Liste
🧱 Node (Düğüm) Yapısı
Her node iki bölümden oluşur:
DATA
42
NEXT
→
Data (Veri): Saklanacak değer (sayı, string, obje vs.)
Next (İşaretçi): Bir sonraki node'un hafıza adresi
# Python'da Node Sınıfı
class Node:
def __init__(self, data):
self.data = data # Veri
self.next = None # Sonraki node'a işaretçi
📊 Dizi vs Bağlı Liste: Hafıza Yapısı
📦 Dizi (Array)
Bitişik (Contiguous) Hafıza
10
20
30
40
50
✅ Hızlı erişim (index ile) ❌ Ekleme/silme yavaş (kaydırma gerekir) ❌ Boyut değiştirmek zor
🔗 Bağlı Liste
Dağınık (Non-contiguous) Hafıza
-
10
-
-
30
-
20
-
40
-
✅ Ekleme/silme hızlı (O(1)) ✅ Dinamik boyut ❌ Erişim yavaş (baştan dolaşmak gerekir)
🎯 Ne Zaman Bağlı Liste Kullanmalı?
Durum
Dizi
Bağlı Liste
Sık erişim (index ile)
✅ İyi
❌ Kötü
Başa/ortaya ekleme
❌ Yavaş
✅ Hızlı
Dinamik boyut
❌ Zor
✅ Kolay
Hafıza verimliliği
✅ Daha az
❌ Pointer overhead
📚 Bağlı Liste Türleri
1️⃣ Tek Yönlü (Singly)
Her node sadece sonrakini gösterir. A → B → C → null
2️⃣ Çift Yönlü (Doubly)
Her node önceki ve sonrakini gösterir. null ← A ⟷ B ⟷ C → null
3️⃣ Dairesel (Circular)
Son node başa bağlıdır. A → B → C → A (döngü)
🌍 Gerçek Hayat Örnekleri
🚆 Tren Vagonları: Her vagon bir sonrakine kanca ile bağlı. Ortadan vagon çıkarmak = sadece kancaları değiştirmek!
🎵 Müzik Çalma Listesi: Şarkılar sırayla bağlı, önceki/sonraki şarkıya geçiş.
🖼️ Fotoğraf Galerisi: Slayt gösterisinde her fotoğraf sonrakine bağlı.
💻 Bilgisayar Bilimlerinde Linked List
🔙 Tarayıcı Geçmişi: İleri/geri navigasyonu doubly linked list ile yapılır.
🗂️ Dosya Sistemi: İşletim sistemleri dosyaları linked list yapısında tutabilir.
⌨️ Metin Editörleri: Her satır bir node, ekleme/silme çok hızlı.
🧮 Polinom Aritmetiği: Matematiksel polinomlar linked list ile temsil edilir.
🎮 Oyun Geliştirme: Oyun nesnelerinin listesi, spawning/despawning.
📊 Hash Table Collision: Çarpışma çözümünde chaining yöntemi linked list kullanır.
💡 Neden Dizi Yerine Linked List?
Dizi: Ortadan eleman silince tüm elemanlar kayar → O(n)
Linked List: Sadece pointer'ları değiştirirsin → O(1)
Sık ekleme/silme yapılan yerlerde linked list avantajlıdır!