Python ile Bağlantılı Liste Oluşturma ve Kullanma Rehberi

Bağlantılı Listeler Nedir?

Bağlantılı listeler, verileri depolamak için kullanılan dinamik veri yapılarıdır. Verilerin her bir elemanı, bir node (düğüm) içerir ve bu düğüm, kendisinden sonraki düğüme bir referans (pointer) tutar. Bu yapısı sayesinde, bağlantılı listeler boyut artırma veya azaltma gibi işlemleri kolayca gerçekleştirebilirler. Eğer veriler sabit boyutlu bir dizi içerisinde depolanırsa, boyut değiştirildiğinde tüm verilerin yeniden kopyalanması gerekebilir. Fakat bağlantılı listelerde, sadece gerekli düğümler eklenir ya da çıkarılır.

Bağlantılı listelerin2 ana türü vardır: tek yönlü bağlantılı liste ve çift yönlü bağlantılı liste. Tek yönlü bağlantılı listede, her düğüm sadece bir sonraki düğümün referansını tutarken, çift yönlü bağlantılı listede hem sonraki hem de bir önceki düğümün referansları tutulur. Bu sayede, çift yönlü bağlantılı listelerin elemanları arasında iki yönlü bir geçiş sağlanabilir.

Python’da bağlantılı listeler yerleşik bir veri yapısı olarak mevcut değildir; ancak, kullanıcılar sınıflar oluşturarak kendi bağlantılı listelerini kolayca oluşturabilirler. Bu yazıda, Python ile nasıl bir bağlantılı liste oluşturabileceğinizi adım adım açıklayacağız.

Python’da Bağlantılı Liste Sınıfı Oluşturmak

İlk adım olarak, bağlantılı listemizi temsil edecek bir sınıf oluşturmamız gerekiyor. Düğüm yapısını temsil eden bir Node sınıfı ve bir bağlantılı listeyi temsil eden bir LinkedList sınıfı oluşturarak başlayalım.

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

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

Yukarıdaki kodda, Node sınıfı, verilen veriyi saklar ve bir sonraki düğüme referans tutar. LinkedList sınıfı ise, listenin başlangıcını temsil eden bir head özelliğine sahiptir. Bağlantılı listeye öğe eklemeden önce, bu yapının temelini anlamamız önemlidir.

Bağlantılı listemizi oluştururken, düğümlerin veri tutma ve bir sonraki düğüme referans tutma işlevselliğine sahip olduğunu göz önünde bulundurmalıyız. Şimdi, bağlantılı listeye düğüm ekleme ve listeyi görüntüleme işlevlerini ekleyelim.

Düğüm Ekleme Fonksiyonu

Bağlantılı listeye öğe eklemek için bir fonksiyon yazmamız gerekiyor. Bu fonksiyon, yeni bir düğüm oluşturacak ve bunu listenin sonuna ekleyecek. Aşağıdaki gibi bir yöntem oluşturabiliriz:

def append(self, data):
    new_node = Node(data)
    if not self.head:
        self.head = new_node
        return
    last = self.head
    while last.next:
        last = last.next
    last.next = new_node

Bu fonksiyon, öncelikle yeni bir düğüm oluşturur. Eğer listenin başı None (boş) ise, bu durumda yeni düğüm baş düğüm olur. Aksi halde, listede son düğümü bulana kadar döngü devam eder ve en son düğümün ‘next’ referansı, yeni düğüme ayarlanır. Bu sayede, yeni düğüm bağlantılı listeye eklenir.

Bağlantılı listeye düğüm eklemek, veri yapısının esnekliğini artırırken, düğüm silme, güncelleme ve arama gibi işlemleri de kolaylaştırır. Şimdi, bağlantılı listemizi görüntülemek için bir yöntem ekleyelim.

Bağlantılı Listeyi Görüntüleme

Bağlantılı listeyi görüntülemek için bir fonksiyon yazmak oldukça önemlidir. Bu fonksiyon, listenin düğümlerini dolaşacak ve her düğümün verisini ekrana basacaktır. İşte bağlantılı listeyi görüntülemek için kosacak bir örnek:

def print_list(self):
    current = self.head
    while current:
        print(current.data, end=" -> ")
        current = current.next
    print("None")

Bu print_list fonksiyonu, baştan sona kadar tüm düğümlerin verisini yazdırır. Eğer listemiz boşsa, sadece None ifadesini basar. Düğümler arasındaki bağlantıları görselleştirmek amacıyla ‘ -> ‘ ifadesini kullanıyoruz.

Artık listenin temel işlevlerini oluşturduk. Şimdi bu yapıyı kullanarak daha karmaşık işlemleri gerçekleştirmeye geçebiliriz.

Özelleştirilmiş İşlevler Eklemek

Bağlantılı listemize ek fonksiyonlar ekleyerek kullanımını zenginleştirebiliriz. Örneğin, düğüm silme, düğüm arama veya belirli bir indekste düğüm ekleme gibi işlevler kullanıcı için oldukça faydalıdır. Aşağıda düğüm silme işlemini gerçekleştiren bir fonksiyon örneği verilmiştir:

def delete_node(self, key):
    current = self.head
    prev = None
    if current and current.data == key:
        self.head = current.next
        current = None
        return
    while current and current.data != key:
        prev = current
        current = current.next
    if current is None:
        return
    prev.next = current.next
    current = None

Bu delete_node fonksiyonu, verilen bir anahtara (data) sahip düğümü siler. Öncelikle, baş düğüm kontrol edilir. Eğer baş düğüm silinecekse, head referansı güncellenir. Sonra, döngü ile arama yapılır ve mevcut düğüm silinir. Bu işlemler, bağlantılı listenin yönetimini oldukça kolay hale getirir.

Ayrıca, belirli bir indekste düğüm ekleme işlemi de yapılabilir. Aşağıda, istenen indekse bir düğüm eklemek için bir örnek verilmiştir:

def insert_at_index(self, index, data):
    if index == 0:
        new_node = Node(data)
        new_node.next = self.head
        self.head = new_node
        return
    new_node = Node(data)
    current = self.head
    for i in range(index - 1):
        current = current.next
    new_node.next = current.next
    current.next = new_node

Bu fonksiyon, istenen indekse yeni bir düğüm ekler. Eğer indeks 0 ise, yeni düğüm baş düğüm olur. Diğer durumlarda, belirtilen indekse kadar döngü çalışır ve ekleme işlemi yapılır. Bu şekilde, bağlantılı listemizin çeşitliliğini arttırmış oluyoruz.

Python’da Bağlantılı Listeler ile Uygulama Örnekleri

Bağlantılı listeleri kullanarak çeşitli uygulamalar gerçekleştirebilirsiniz. Örneğin, bir oyun ağırlıklı veri yapısında oyuncu sıralama listeleri oluşturabilirsiniz. Bağlantılı listeleri bellek yönetimi, görev takibi ve daha pek çok alanda kullanabilirsiniz. Aşağıda, basit bir bağlantılı liste uygulaması görebilirsiniz:

llist = LinkedList()
llist.append(10)
llist.append(20)
llist.append(30)
llist.print_list()
llist.delete_node(20)
llist.print_list()

Bu örnekte, bir bağlantılı liste oluşturulmuş, öğeler eklenmiş ve bir düğüm silindikten sonra liste yeniden yazdırılmıştır. Bağlantılı listelerin bu esnek yapısı, farklı türden veri işlemlerinde kolaylık sunar.

Bağlantılı listelerle ilgili diğer uygulamalar arasında müşteri bilgi sistemleri, dinamik grafik yapıları ve araç listeleri yer alır. Her bir uygulama, bağlantılı listelerin dinamik yapısından yararlanarak veri yönetiminde esneklik sağlar.

Sonuç ve Öneriler

Python ile bağlantılı listeler oluşturarak dinamik ve esnek veri yapıları geliştirmek mümkündür. Düğüm ekleme, silme ve görüntüleme gibi temel işlevleri ekleyerek, bağlantılı listeleri farklı uygulama alanlarında kullanabilirsiniz. Python’un objelerle yönlendirilmiş yapısını kullanarak, bağlantılı listeleri özelleştirip zenginleştirmek oldukça kolaydır.

Bağlantılı listeler, veri yapıları arasındaki yerlerini aldıkları için özellikle veri yönetimi gereken projelerde büyük avantaj sağlar. Daha fazla deneyim kazanmak ve bağlantılı listelerin özelliklerini derinlemesine öğrenmek için projeler geliştirin ve uygulamalarınızı zenginleştirin.

Tekrar hatırlatmak gerekirse, bağlantılı listeler dinamik veri yapılarıdır ve boyut değişimi gibi durumlarda dizi bazlı yapılara göre daha esneklik sunar. Bu nedenle, veri yapısıyla ilgili projelerinizde bağlantılı listeleri değerlendirmeyi unutmayın. İyi çalışmalar!

Scroll to Top