Günümüzde veri yapıları, yazılım geliştirmenin temel taşlarından biri olarak kabul edilir ve bu yapılar arasında bağlı listeler özel bir yer tutar. Dinamik veri yapısı olmaları nedeniyle, bağlı listeler, veri miktarının önceden bilinmediği veya sıkça değiştiği durumlarda mükemmel bir esneklik sunar. Örneğin, sosyal medya uygulamalarında, kullanıcıların arkadaş listeleri veya takip ettikleri içerikler gibi dinamik veri koleksiyonlarını yönetirken bağlı listeler kullanılabilir. Ayrıca, işletim sistemlerinde, süreç yönetimi ve hafıza tahsis etme gibi kritik görevlerde bağlı listelerden faydalanılır. Bu veri yapısının bir diğer önemli kullanım alanı ise oyun geliştirmedir; özellikle, karakter hareketleri, AI davranışları ve sahne yönetimi gibi dinamik sistemlerin yönetilmesinde bağlı listeler tercih edilebilir.

Bağlı listeler, veriye erişim ve veri manipülasyonu konusunda esneklik sağladığı için yazılım geliştirmede vazgeçilmez bir araçtır. Algoritma tasarımında, veri ekleme ve silme işlemleri sırasında dizilere kıyasla daha az maliyetli olmaları, onları özellikle zaman ve hafıza verimliliği gerektiren uygulamalar için ideal kılar. Ayrıca, karmaşık veri yapıları oluşturmak ve yönetmek, örneğin çeşitli ağ yapılarını simüle etmek veya belirli arama ve sıralama algoritmalarını uygulamak için de bağlı listelerden yararlanılır. Böylece, bağlı listelerin anlaşılması ve kullanılması, modern yazılım geliştirme süreçlerinde önemli bir beceri haline gelmiştir.

Bağlı Listeler adından da anlaşılacağı üzere birbiri ile ilişkili veriler tutan bir yapıdır. Ram üzerinde birden çok veri tutarken temel olarak iki veri tipi ön plana çıkmaktadır. Native olarak sıklıkla kullanılan veri yapısı Dizi (Array) veri yapısıdır. Bağlı Liste ise Dizi veri yapısına alternatif olarak kullanılan ve kendine has artıları ve eksileri olan bir veri yapısıdır.

Birden çok veriyi tutmak için günümüzde, liste, tuple, dictionary gibi yapılar bulunmaktadır. Ancak bunlar programlama dili içerisinde arka planda düzenlenen veri tipleridir. Bunların da soyut veri tipi (Abstract Data Type) olduğu söylenebilir. ADT içerisinde en temel veri tipi bağlı listelerdir. Diziler ise primitif veri yapısına (yani ilkel veri tipi) girmektedir.

Bağlı Liste Çeşitleri

Bağlı Listeler kendi arasında yapılarına göre kategorilerine ayrılırlar.

  • Tek Yönlü Bağlı Listeler (Singly Linked Lists)
  • Çift Yönlü Bağlı Listeler (Doubly Linked List)
  • Dairesel Bağlı Listeler (Circular Linked List)

her ne kadar çeşitleri olsa da temel mantık itibariyle birbirlerine benzer yapılardır. Burada temel mantık, kendimizin veri oluşturduktan sonra diğer başka bir veri ile ilişkilendirilmesini sağlamaktır. Veriler yine ram üzerinde oluşturulurlar. Biz 1000 tane veri oluştursak da, eğer bu verileri dizi üzerinde tutmaz ya da birbirleri ile ilişkilendirmezsek bu verilere programın çalışma zamanında (runtime) tekrar ulaşamayız. Bağlı Listeler Dizilere alternatif olarak bizim verilerimizi birbileri ile ilişkilendirmemize olanak tanırlar.

Bağlı Liste Terminolojisi

Bağlı Listelerde Sıklıkla kullanacağımız ingilizce kelimeler ve anlamları:

  • Linked List: Bağlı Liste
  • Singly Linked List: Tek Yönlü Bağlı Liste
  • Doubly Linked List: Çift Yönlü Bağlı Liste
  • Circular Linked List: Dairesel Bağlı Liste
  • Node: Düğüm. Bağlı listelerde veri tutan en küçük birimlere denir. İçerisinde bir çok değişken barındırabilir. OOP dillerindeki class’tan türetilen nesne olarak düşünebilirsiniz.
  • Traverse: Dolaşmak anlamına gelir. Bu kelimeyi gördüğünüz zaman veri yapısındaki tüm ilişkisel yapılara tek tek ulaşmayı kast ettiğimizi düşünebilirsiniz. Arama işlemi de teknik olarak traverse işlemidir. Aranılan veri bulunduğunda traverse işlemi durur.
  • Malloc: C programlama dilinde struct ile oluşturulmuş bir nesne oluşturulurken ram üzerinde gerekli alanı oluşturmak için çağırdığımız bir fonksiyondur. C programlama dili dışındaki OOP tabanlı dillerde malloc yerine new anahtar sözcüğü kullanılır.
  • Insert at last: bağlı listenin sonuna eleman eklemek anlamında kullanılır.
  • Insert at begin: Bağlı listenin başına eleman eklemek anlamında kullanılır.
  • Insert anywhere: Bağlı listenin başı veya sonu olmamak kaydıyla aradaki herhangi bir konuma eleman eklemek anlamında kullanılır.
  • Delete from last: Bağlı listenin sonundaki elemanı silme anlamında kullanılır.
  • Delete from beginning: Bağlı listenin başındaki elemanı silmek.
  • Delete from anywhere: Bağlı listedeki başlangıç ve bitiş düğümü hariç herhangi bir yerden düğüm silme anlamına gelir.
  • Reverse Linked List: Bağlı Listeyi Ters Çevirme anlamındadır.
  • Merge Linked Lists: Birden fazla bağlı listeyi birleştirme anlamında kullanılır.

Bağlı Liste Yapısı

Bağlı Liste Yapısı için aşağıdaki şekle göz atabiliriz.

Bağlı listeler node (düğüm) denilen yapılardan oluşur. Bu düğüm yapısı içerisinde pek çok çeşitte veri tutulabilir. Verilen örnekte sadece int i; değişkeni tutulmuş. Sayı sınırlaması bulunmadan istenildiği kadar veri tutulabilir. Ancak her düğümde mutlaka ve mutlaka sonraki düğümü refere eden bir değişken bulunmalıdır. Yani her düğüm kendinden sonra gelen düğümün adresini tutmak zorundadır. (Çift yönlü bağlı listelerde kendisinden önce gelen düğüm de tutulur. Yukarıdaki örnek tek yönlü bağlı liste örneğidir). Bu sayede biz bir veriyi ararken, diğer düğüme bu tutulan veri sayesinde ulaşabilmekteyiz.

C Gibi dillerde adres tutmak için pointer adı verilen değişkenler bulunmaktadır. Pointer değişkenleri işaret edilmek istenen adresin değerini tutar. Bu sayede referanslı erişim sağlanır. Java, C# ya da script tabanlı dillerde (python, php) pointer kullanımına gerek duyulmamaktadır Sitemizde her iki şekli de sizlere anlatılacaktır.