Bağlı Listeler (Linked List)

Yazar : zafer 21. Ağustos 2009 19:26

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;
}

Tags: , ,

C Notları

Yorum ekle




  Country flag
biuquote
  • Yorum
  • Canlı önizleme
Loading


Zafer Günlükleri © 2008 - 2012 Zafer'in kişisel paylaşım sitesi.
BlogEngine.NET 2.0.0.36 | Tema : Mads Kristensen | Düzenleyen : Zafer Çelenk
Oturum Aç | APML ile filtrele

Anket

D dilini duydunuz mu?




Sonuçlar

Projeler

Galeri

Takvim

<<  Mayıs 2012  >>
PaSaÇaPeCuCuPa
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

Yazıları takvimde göster

Satranç

I play chess at Chess.com!

Son Yorumlar

Comment RSS

Yasal Uyarı

Bu site görüşlerin paylaşıldığı kişisel bir blogdur. Site içeriğinden meydana gelebilecek sorunlardan site sahibi sorumlu değildir. Yorumlar site sahibi tarafından onaylandıktan sonra yayınlanacaktır.