Diziler vs Bağlantılı Listeler
Diziler, elemanların toplanması için en yaygın kullanılan veri yapısıdır. Çoğu programlama dili, dizileri kolayca bildirmek ve dizilerdeki öğelere erişmek için yöntemler sağlar. Bağlantılı liste, daha kesin olarak tekil bağlantılı liste, aynı zamanda eleman koleksiyonunu saklamak için kullanılabilecek bir veri yapısıdır. Bir düğüm dizisinden oluşur ve her düğümün dizideki bir sonraki düğüme referansı vardır.
Şekil 1'de, tipik olarak bir diziye değer bildirmek ve atamak için kullanılan bir kod parçasıdır. Şekil 2, bir dizinin bellekte nasıl görüneceğini gösterir.
Yukarıdaki kod, 5 tamsayı saklayabilen bir dizi tanımlar ve bunlara 0 ila 4 arasındaki indeksler kullanılarak erişilir. Bir dizinin önemli özelliklerinden biri, dizinin tamamının tek bir bellek bloğu olarak ayrılması ve her öğenin dizide kendi alanını almasıdır. Bir dizi tanımlandıktan sonra boyutu sabitlenir. Bu nedenle, derleme zamanında dizinin boyutundan emin değilseniz, güvenli tarafta olacak kadar büyük bir dizi tanımlamanız gerekir. Ancak çoğu zaman, tahsis ettiğimizden daha az sayıda eleman kullanacağız. Böylece hatırı sayılır miktarda hafıza boşa harcanıyor. Öte yandan, “yeterince büyük dizi” aslında yeterince büyük değilse, program çökebilir.
Bağlantılı bir liste, belleği kendi bellek bloğunda ayrı ayrı elemanlara tahsis eder ve genel yapı, bu elemanların zincirdeki bağlantılar olarak bağlanmasıyla elde edilir. Bağlantılı bir listedeki her öğenin Şekil 3'te gösterildiği gibi iki alanı vardır. Veri alanı, depolanan gerçek verileri tutar ve sonraki alan, zincirdeki bir sonraki öğeye referans tutar. Bağlantılı listenin ilk öğesi, bağlantılı listenin başı olarak saklanır.
veri | Sonraki |
Şekil 3: Bağlantılı Listenin Öğesi
Şekil 4, üç elemanlı bağlantılı bir listeyi göstermektedir. Her öğe verilerini ve sonuncusu dışındaki tüm öğeleri bir sonraki öğeye referans depolar. Son öğe bir sonraki alanında boş bir değer tutar. Listedeki herhangi bir öğeye, başlayarak başlayıp gerekli öğeyi karşılayana kadar bir sonraki işaretçiyi izleyerek erişilebilir..
Diziler ve bağlantılı listeler, her ikisinin de öğe koleksiyonunu saklamak için kullanıldığı anlamında benzer olsa da, öğelerine bellek ayırmak için kullandıkları stratejiler nedeniyle farklılık gösterirler. Diziler tüm öğelerine tek bir blok olarak bellek ayırır ve dizinin boyutu çalışma zamanında belirlenmelidir. Bu, dizinin derleme zamanında boyutunu bilmediğiniz durumlarda dizileri verimsiz hale getirir. Bağlantılı bir liste, öğelerine ayrı ayrı bellek ayırdığından, derleme zamanında listenin boyutunu bilmediğiniz durumlarda çok verimli olur. Bağlantılı bir listedeki bildirimler ve öğelere erişme, bir dizideki öğelere dizinlerini kullanarak doğrudan erişme biçiminizle karşılaştırıldığında doğrudan olmaz.