C dilinde birden fazla değer atamak ve bu değerlerle çalışmak için dizileri kullanırız. Buna rağmen programımız gelişmeye başladıkça dizilerin bizim için yetersiz kaldığınıda görmekteyiz. Bu durumda yeni yapılara ihtiyaç olmaktadır. Bu yapılardan birisi bağlı listelerdir. (linked list)
Bağlı listeler kendine dönüşlü yapılardan (struct) faydalanarak elde eldilen ve içeriklerinde bulunan bir bağ elemanı sayesinde birbirlerine bağlanan yapı öbeğidir. Bu tanım çok açık gibi gözükmüyor, isterseniz alttaki resim üzerinde tanımlarımıza devam edelim, sanıyorum bu daha anlaşılır olacak.

Yukarıdaki şekilde de göründüğü gibi her bir yapının bağ elemanı bir sonraki yapının adresini gösteriyor. Bu yapılara bağlı liste üzerindeki düğümler deniliyor. Bu sayede ilk düğümden başlayıp tüm bu listeyi bağ elemanlarının yardımıyla dolaşma yeteneğine sahip oluyoruz. Bunun yanında çalışma zamanında yeni düğümler oluşturup bunlarıda listeye ekleyerek listemizi genişletebilir veya düğüm silerek listemizi küçültebiliriz.
Tüm bunlardan sonra basit bir bağlı liste kod örneği ile yazımızı sonlandıralım. Kodlamada amacım listeye odaklanmak oldugu için bazı bellek kontrollerini ihmal ettim. Gerçek programlarda ise bu tür kontrolleri mutlaka yapmalıyız. Tüm okuyucularıma sağlık ve mutluluk dilerim.
#include <stdio.h>
#include <stdlib.h>
struct dugum {
int veri;
struct dugum* sonraki;
};
int main() {
struct dugum * basDugum = NULL;
struct dugum * geciciDugum;
int i;
/* basDugum icin bellekte yer ayir ve adresini ver */
basDugum = (struct dugum *) malloc(sizeof(struct dugum));
/* basDugumu geciciDugume al (basDugumu kaybetmeyi istemeyiz.) */
geciciDugum = basDugum;
for(i=0; i<10; i++) {
geciciDugum->veri = i * 10;
/* geciciDugum bag elemani icin bellekten yeni bir yer ayir ve adresi bag elemanina ata */
geciciDugum->sonraki = (struct dugum *) malloc(sizeof(struct dugum));
/* geciciDugumu bir sonraki dugume (yeni dugume) ilerlet */
geciciDugum = geciciDugum->sonraki;
}
/* gecicidDugum (son dugum) bag elemanina NULL ata */
geciciDugum->sonraki = NULL;
printf("Bagli liste dokumu : \n");
/* geciciDugum'e basDugum adresi ata (listenin ilk dugumune donduk.) */
geciciDugum = basDugum;
/* dugumun bag elemanı NULL oluncaya kadar degerleri yaz ve sonraki dugume gec */
while (geciciDugum->sonraki != NULL) {
printf("-> %d\n",geciciDugum->veri);
geciciDugum=geciciDugum->sonraki;
}
return 0;
}
Etiketler: bagli, liste, linked