crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
Linked List: Bellekteki Esnek Zincirler
Bağlı listelerde her bir elemana Node (Düğüm) denir. Bir düğüm iki ana parçadan oluşur: Saklamak istediğiniz Veri ve bir sonraki düğümün nerede olduğunu gösteren Pointer (İşaretçi).
1. Tekli Bağlı Liste (Singly Linked List)
En temel bağlı liste türüdür. Her düğüm sadece kendisinden sonraki düğümü bilir. Tek yönlü bir yol gibidir; geriye gidiş yoktur.
Veri Yapısı: [ Veri | Sonraki Adres ]
Avantajı: Bellek tüketimi düşüktür (sadece tek bir pointer tutar).
Dezavantajı: Bir düğüme ulaştığınızda geriye dönemezsiniz.
C++:
struct Node {
int veri;
Node* sonraki; // Bir sonraki dugumun adresi
};
2. Çiftli Bağlı Liste (Doubly Linked List)
Bu yapıda her düğüm hem kendinden sonrakini hem de kendinden öncekini bilir. Çift yönlü bir yol gibi çalışır.
Veri Yapısı: [ Önceki Adres | Veri | Sonraki Adres ]
Avantajı: Listede her iki yöne de gezinebilirsiniz. Bir düğümü silmek çok daha kolaydır.
Dezavantajı: Her düğümde fazladan bir pointer tutulduğu için daha fazla bellek kaplar.
C++:
struct DoublyNode {
int veri;
DoublyNode* sonraki;
DoublyNode* onceki; // Geriye donus yolu
};
3. Linked List vs. Vector (Dizi)
Hangi durumda hangisini kullanmalısınız? İşte kritik karşılaştırma:
| Özellik | Vector / Dizi | Linked List |
|---|---|---|
| Erişim Hızı | Çok Hızlı (İndeks ile direkt). | Yavaş (Baştan saymak gerekir). |
| Ekleme/Silme | Yavaş (Diğerleri kaydırılır). | Çok Hızlı (Sadece adres değişir). |
| Bellek Yapısı | Bitişik (Sıralı). | Dağınık (Bellekteki boşluklara yayılır). |
| Bellek Verimi | Kapasite aşımında yer kaplar. | Her düğüm için ek pointer yükü. |
4. C++ STL'de Bağlı Listeler
Kendi bağlı listenizi yazmak veri yapılarını öğrenmek için harikadır, ancak profesyonel projelerde C++'ın hazır yapılarını kullanırız:
std::list: Çiftli Bağlı Liste (Doubly Linked List).
std::forward_list: Tekli Bağlı Liste (Singly Linked List).
C++:
#include <list>
std::list<int> liste = {10, 20, 30};
liste.push_front(5); // Basina eleman eklemek O(1) hizindadir!
Sonuç
Bağlı listeler, listenin başına veya ortasına sürekli eleman ekleyip çıkardığınız durumlarda performans canavarıdır. Ancak "rastgele erişim" (örneğin 500. elemanı getir) gerekiyorsa, her seferinde baştan sona doğru düğümleri tek tek gezmek zorunda kalacağı için vektörlerin gerisinde kalır.