Veri Yapılarına Giriş – Linked List Mantığı

Bu yazı serisinde bilgisayar mühendisliğinin en temel konularından biri olan veri yapılarına giriş yapacağız. Mantığı kavrandığında oldukça keyifli bir konu olmasına karşın, mantığının kavranması bir o kadar zor bir konudur. Bu yazı sayesinde hem kendime ileride konuyu tekrar edebilme amaçlı bir kaynak bırakmış olacağım hem de uçsuz bucaksız internet aleminde bu konuyla ilgili meraklılarının girip okuyabileceği bir iz bırakmış olacağım.

Öncelikle anlatım tarzımı veya anlattığım konuları eleştirecekler için ufak bir dipnot paylaşmak istiyorum. Ben bir akademisyen değilim. Dolayısıyla yazmış olduğum hiçbir şeyin %100 geçerliliğinin olmasını ve inanılmaz teorik olmasını bekleyemezsiniz. Eğer yazıyla ilgili bir bilgi yanlışlığı/eksikliği ile karşılaşırsanız bunu yorumlarda belirtiniz ki yazıyı güncelleme fırsatı yakalayayım.

Linked List (Bağlı Liste) Nedir?

Linked List Mantığı

Linked List Node (düğüm) altyapısı ile çalışır. Her elemanın kendi değeri ve kendinden sonra gelen elemanın RAM’deki fiziksel lokasyonunu bildiren kısmı mevcuttur. Dolayısıyla eğer birinci elemanın nerede olduğunu bilirsem ordan ikinci elemana oradan da üçüncü elemana ulaşılabilir. Birinci elemanı ise root (kök) ismi verilen bir alan tutar.

Linked List (Bağlı Liste) ve Array (Dizi) Arasındaki Farklar

  1. Dizilerde istediğimiz elemana indis değerini girerek anında ulaşabiliriz. Array Listler ise bağlı olduğundan doğrudan herhangi bir elemanına ulaşım mümkün değildir. Örneğin Linked List içerisindeki 3. elemana ulaşabilmek için önce root, oradan 1. eleman, oradan 2. eleman, oradan ise 3. elemana ulaşılması gerekir. Arraylerde ise ardaşık sıralamalar ile ram üzerine kayıt olduğu için anında 3. elemana erişmek mümkündür.
  2. Dizilerde eleman ekleme ve silme işlemleri bağlı listelere göre oldukça maliyetlidir. Yine aynı şekilde 3. elemanı silmek istediğimizi düşünelim. Dizilerde bunu yapabilmenin tek yolu 3. elemandan sonra gelen her elemanı geriye kaydırmak ve dizinin boyutunu 1 azaltmaktır. Bağlı listelerde ise 2. elemanın yol göstericisine 4. elemanın fiziksel adresinin yazılması 3. elemanın devre dışı kalması için yeterlidir.
  3. Bağlı liste dinamiktir. İstendiği taktirde eleman ekleme, silme gibi işlemler kolaylıkla yapılabilir. Dizilerde ise tanımlanırken boyut verme zorunluluğu bulunmaktadır. Dolayısıyla bir eleman silmek veya yeni bir eleman eklemek için yeni bir dizi tanımlanıp eski dizinin tüm elemanlarının yeni diziye geçirilmesi zorunluluğu bulunmaktadır.

Son Notlar

Belirtmek isterim ki bu veri yapılarından birinin bir diğerine üstünlüğü bulunmamaktadır. Ne yapacağınıza göre kullanacağınız veri modelinin belirlenmesi gerekmektedir. Eğer sizin için rastgele bir elemana hızlı bir biçimde erişebilmek önemliyse array, yeni veri ekleme ve silme işlemleri yapılacaksa veya verinin boyutu belirli değil ise array list kullanmalısınız.

Kaynakça

  1. https://www.studytonight.com/data-structures/linked-list-vs-array
  2. C ve Java ile Veri Yapılarına Giriş, 2. Baskı – Olcay Taner Yıldız
  3. http://www.necessaryandsufficient.net/2008/05/differences-between-arrays-and-linked-lists/
  4. https://www.youtube.com/watch?v=lC-yYCOnN8Q , mycodeschool

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir