Single Linked List — Tek Yönlü Bağlı Liste

SamedSonkaya
4 min readMar 25, 2024

--

Single->Linked->List

Bağlı Liste Nedir ?

Bağlı listeler, programlamada sıkça kullanılan veri yapılarından biridir ve verilerin eklenmesi, çıkarılması ve değiştirilmesi gibi işlemleri etkin bir şekilde gerçekleştirmeye olanak tanır.

Bağlı listelerin temelinde, verilerin birbirine bağlı olduğu ve her bir verinin ardışık olarak depolandığı bir yapı bulunur. Bu yapı, her bir veri öğesinin bir düğüm olarak adlandırıldığı ve her düğümün kendisine ait bir veri alanı ile bir sonraki düğümün referansını içerdiği bir modele sahiptir. Bağlı listenin başlangıç noktasını belirten bir baş düğüm (head) ve sonunda sonraki düğümü olmayan bir son düğüm bulunur.

Bağlı listelerin dinamik boyut avantajı bulunur. Yeni düğümler eklenebilir veya mevcut düğümler kaldırılabilir, bu sayede bağlı listeler veri yapısının boyutunu esnek bir şekilde ayarlamak için kullanılabilir.

Bağlı listeler, özellikle verinin sık sık eklenip çıkarılması gereken durumlarda veya bellek kullanımının optimize edilmesi gerektiği durumlarda yaygın olarak kullanılır. Ancak, bağlı listelerin dizilere kıyasla bellek kullanımı ve erişim hızı açısından bazı dezavantajları olabilir. Bu nedenle, veri yapısı seçiminde bağlı listelerin kullanılması, spesifik gereksinimlere ve performans beklentilerine bağlıdır.

Bağlı listeler; tek yönlü bağlı listeler, çift yönlü bağlı listeler, dairesel bağlı listeler gibi çeşitli türlerde olabilir. Tek yönlü bağlı listelerde her düğüm sonraki düğümü işaret ederken, çift yönlü bağlı listelerde her düğümün bir önceki ve bir sonraki düğümü işaret eder. Dairesel bağlı listelerde ise son düğüm ilk düğümü işaret eder, böylece liste bir döngü oluşturur.

Bu yazımda sizlere tek yönü bağlı listeleri anlatacağım.

Tek Yönlü Bağlı Liste Nedir ?

Tek yönlü bağlı listeler düğümlerden(Node) oluşur. Her bir düğüm, veri ve bir sonraki düğümün referansını içerir. İlk düğüme baş düğüm (head) denir ve son düğümün Next’i None’dur, bu da listenin sonunu belirtir.

Tek Yönlü Bağlı Listede Temel Kavramlar :

  • Baş Düğüm (Head): Bağlı listenin ilk düğümüdür. Listenin başlangıç noktasını belirtir.
  • Düğüm (Node): Veri ve bir sonraki düğümün referansını içeren yapıdır.
  • Veri (Data): Düğümde saklanan bilgi.
  • Sonraki (Next): Düğümün bir sonraki düğümünü işaret eden referanstır.

Tek Yönlü Bağlı Listede Veri Ekleme ve Veri Silme

Veri Ekleme :

Listemize sırası ile 6, 11, 4, 7 ve 12 verilerini ekleyeceğiz.

Öncelikle düğümlerimiz için Node adında bir sınıf tanımlıyoruz. Bu sınıfta, içinde tutmak istediğimiz veri için “data” ve sonraki Node’u göstermesi için “next” adında iki özellik tanımlıyoruz.

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

Daha sonra listemizde işlemler yapabilmek için SingleLinkedList adında bir sınıf tanımlıyoruz ve veri eklemek için append fonksiyonu ekliyoruz.

class SingleLinkedList:

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

if __name__ == "__main__":
linked_list = SingleLinkedList()
linked_list.append(6)

Bu kodda linked_list adında liste tanımlıyoruz. İlk başta head adında bir baş düğüm oluşturuyoruz daha sonrasında append ile veri ekliyoruz.

head-6

Bu işlemde liste boş olduğundan(Head = None) { if self.head is None: } koşulunun içine girer. Bu durumda yeni düğüm, Head olarak atanır ve işlem tamamlanır.

Sırası ile 11, 4, 7 ve 12 verilerini ekliyoruz.

11–4–7–12 eklenmesi

Bu kısımda veri eklerken şu adımları izliyoruz:

  1. Yeni bir düğüm oluşturulur.
  2. Oluşturulan düğümün head olup olmadığına bakılır.
  3. Eğer liste boşsa (baş düğüm None ise), yeni düğüm baş düğüm olarak atanır.
  4. Eğer liste doluysa, listenin son düğümü bulunur.
  5. Listenin son düğümünün referansına (next) yeni düğüm eklenir.

Veri Silme :

Tek yönlü bağlı listede, eğer son düğüm silinecekse, o düğümün bir önceki düğümünün referansı None yapılarak kolaylıkla silinebilir.

12 silinmesi

Eğer orta bir düğüm silinecekse, silinecek düğümün bir önceki düğümünün next referansını, silinecek düğümün next referansına eşitleyerek silme işlemi gerçekleştirilebilir.

 def delete(self, data):
node = self.head

b_node = None
while node and node.data != data:
b_node = node
node = node.next

if node:
b_node.next = node.next
node = None
4 silinmesi

Eğer baş düğümü (head) silinecekse, baş düğümünün değeri yerine bir sonraki düğümün değeri (next ) atanmalıdır. Bu işlemle birlikte, baş düğümünün referansı silinir ve listenin yeni baş düğümü, eski baş düğümünün bir sonraki düğümü olur.

node = self.head

if node and node.data == data:
self.head = node.next
node = None
return
Head silinmesi

Bu silme işlemlerinde düğümler silinmez, ancak liste gösteriminde artık görünmezler. Python’daki çöp toplayıcısı (garbage collector), kullanılmayan ve referansı olmayan nesneleri belirli aralıklarla temizler. Bu nedenle, silinen düğümler zamanla bellekten serbest bırakılır ve programın performansını etkilemez.

Tek yönlü bağlı listeler, verilerin dinamik olarak yönetilmesini sağlayan önemli bir veri yapısıdır. Python gibi esnek bir dilde, bağlı listelerin uygulanması oldukça kolaydır. Bu yazımda, tek yönlü bağlı listelerin temel kavramlarını ve Python’da nasıl uygulanacağını göstermeye çalıştım.

Umarım faydalı bir yazı olmuştur. Herkese iyi çalışmalar dilerim. Kodumun tam haline GitHub sayfamdan ulaşabilirsiniz.

https://github.com/SamedSonkaya/SingleLinkedList/tree/main
https://www.linkedin.com/in/samed-sonkaya-6a183b20a/

--

--