bağlı liste ne demek?

Bağlı Liste

Bağlı liste, veri yapısı'dır ve elemanların doğrusal bir dizisidir. Her eleman, veri depolayan bir düğüm ve bir sonraki düğüme işaret eden bir bağlantı (veya işaretçi) içerir. Dizilerin aksine, bağlı listedeki elemanlar bellekte ardışık konumlarda saklanmak zorunda değildir. Bu, bağlı listelerin dinamik boyutlandırma ve kolay ekleme/çıkarma işlemleri gibi avantajlar sunmasını sağlar.

Temel Kavramlar

  • Düğüm (Node): Bağlı listenin temel yapı taşıdır. Genellikle iki bölümden oluşur:

    • Veri (Data): Düğümde saklanan gerçek bilgidir. Bu, herhangi bir veri türü olabilir.
    • Bağlantı (Link/Pointer): Bir sonraki düğüme işaret eden adrestir. Listenin son düğümünün bağlantısı genellikle NULL veya None olarak ayarlanır.
  • Baş (Head): Listenin ilk düğümüne işaret eden göstericidir. Listenin tamamına erişmek için baş düğüme sahip olmak gereklidir.

  • Kuyruk (Tail): Listenin son düğümüdür. Kuyruk düğümünün bağlantısı genellikle NULL veya None olarak ayarlanır.

Bağlı Liste Çeşitleri

Bağlı listeler, bağlantı yönüne, döngüselliğine ve düğüm sayısına bağlı olarak farklı türlere ayrılır:

  1. Tek Yönlü Bağlı Liste (Singly Linked List): Her düğüm sadece bir sonraki düğüme işaret eder. Listenin sadece bir yönde (baştan sona) geçilmesi mümkündür.

  2. Çift Yönlü Bağlı Liste (Doubly Linked List): Her düğüm hem bir sonraki düğüme hem de bir önceki düğüme işaret eder. Bu, listenin her iki yönde de (baştan sona ve sondan başa) geçilmesini sağlar. Bu tür listeler, daha fazla bellek gerektirir ancak daha esnektir.

  3. Dairesel Bağlı Liste (Circular Linked List): Son düğüm, baş düğüme işaret eder, böylece liste döngüsel hale gelir. Tek yönlü veya çift yönlü olabilirler.

  4. Çoklu Bağlı Liste (Multiply Linked List): Her düğüm birden fazla bağlantıya sahip olabilir, bu da karmaşık ilişkileri temsil etmeyi mümkün kılar. Örneğin, bir ağaç yapısını temsil etmek için kullanılabilirler.

Bağlı Listenin Avantajları

  • Dinamik Boyut: Bağlı listelerin boyutu, çalışma zamanında dinamik olarak artırılabilir veya azaltılabilir. Bu, önceden boyut belirtme zorunluluğunu ortadan kaldırır.

  • Kolay Ekleme ve Çıkarma: Yeni bir düğüm eklemek veya çıkarmak, sadece bağlantıları güncelleyerek kolayca yapılabilir. Dizilerde ise elemanların kaydırılması gerekebilir.

  • Bellek Kullanımı: Bağlı listeler, bellek kullanımında daha esnek olabilir. Elemanlar bellekte ardışık olmak zorunda olmadığından, bellek parçalanmasından daha az etkilenirler.

Bağlı Listenin Dezavantajları

  • Rastgele Erişim Yok: Dizilerde olduğu gibi doğrudan bir elemana erişmek mümkün değildir. Belirli bir elemana ulaşmak için listenin başından başlayarak sırayla dolaşmak gerekir. Bu, erişim süresini artırır.

  • Ek Bellek Kullanımı: Her düğüm, bir sonraki düğüme işaret eden bir bağlantı (işaretçi) içerdiği için, dizilere göre daha fazla bellek kullanır. Çift yönlü bağlı listelerde bu ek bellek daha da artar.

  • Önbellek Performansı: Bellekte ardışık olmayan elemanlar nedeniyle, önbellek performansı dizilere göre daha düşüktür.

Bağlı Liste İşlemleri

  • Ekleme (Insertion):

    • Başa ekleme: Yeni bir düğüm, listenin başına eklenir ve baş göstericisi güncellenir.
    • Sona ekleme: Yeni bir düğüm, listenin sonuna eklenir.
    • Araya ekleme: Yeni bir düğüm, belirli bir konumdaki düğümün önüne veya arkasına eklenir.
  • Çıkarma (Deletion):

    • Baştan çıkarma: Listenin başındaki düğüm çıkarılır ve baş göstericisi güncellenir.
    • Sondan çıkarma: Listenin sonundaki düğüm çıkarılır.
    • Aradan çıkarma: Belirli bir konumdaki düğüm çıkarılır.
  • Arama (Searching): Belirli bir değere sahip bir düğümü bulmak için liste boyunca arama yapılır.

  • Geçiş (Traversal): Listenin tüm elemanlarını sırayla ziyaret etme işlemidir.

Bağlı Liste Uygulamaları

Bağlı listeler, çeşitli uygulamalarda kullanılır:

  • Yığın (Stack) ve Kuyruk (Queue) Veri Yapıları: Bağlı listeler kullanılarak kolayca uygulanabilirler. Yığın veri yapısı LIFO (Last-In, First-Out) prensibine göre çalışırken, Kuyruk veri yapısı FIFO (First-In, First-Out) prensibine göre çalışır.

  • Sembol Tabloları: Derleyicilerde ve yorumlayıcılarda sembol tablolarını uygulamak için kullanılabilirler.

  • Çok Terimli Hesaplama: Matematiksel ifadeleri temsil etmek ve manipüle etmek için kullanılabilirler.

  • Graf Veri Yapıları: Komşu listesi (Adjacency List) kullanarak graf veri yapılarını temsil etmek için kullanılabilirler.

  • Bellek Yönetimi: İşletim sistemlerinde bellek yönetimi için kullanılabilirler.

  • Geri Al/Yinele (Undo/Redo) Fonksiyonları: Uygulamalarda kullanıcı eylemlerini izlemek ve geri almak/yinelemek için kullanılabilirler.

Bağlı Liste Örnekleri (Python)

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
            return
        last_node = self.head
        while last_node.next:
            last_node = last_node.next
        last_node.next = new_node

    def print_list(self):
        current_node = self.head
        while current_node:
            print(current_node.data)
            current_node = current_node.next

# Örnek Kullanım
linked_list = LinkedList()
linked_list.append(1)
linked_list.append(2)
linked_list.append(3)
linked_list.print_list()  # Output: 1 2 3

Bu örnek, temel bir tek yönlü bağlı liste uygulamasını göstermektedir. Farklı programlama dillerinde benzer şekilde uygulanabilir.

Sonuç

Bağlı listeler, dinamik boyutlandırma ve kolay ekleme/çıkarma gibi avantajları olan önemli bir veri yapısıdır. Ancak, rastgele erişim eksikliği ve ek bellek kullanımı gibi dezavantajları da vardır. Uygulama gereksinimlerine göre en uygun veri yapısını seçmek önemlidir. Farklı veri yapıları hakkında bilgi almak için Diğer Veri Yapıları sayfasına bakabilirsiniz.

Kendi sorunu sor