Linked List (Bağlı Liste): Tekli ve Çiftli Bağlı Liste Yapımı

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:

ÖzellikVector / DiziLinked List
Erişim HızıÇok Hızlı (İndeks ile direkt).Yavaş (Baştan saymak gerekir).
Ekleme/SilmeYavaş (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 VerimiKapasite 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.
 
Geri
Üst