Linked List Traverse İşlemi - (Bağlı Liste Elemanlarını Dolaşmak)

linked list traversal
Bağlı Liste Dolaşma

Bir önceki yazımızda Linked List Oluşturma işlemi konusunu anlatmıştık. Konu bağlı liste eleman ekleme konusuna geldi çattı. Ama o konuya girmeden önce linked list elemanlarını traverse etme konusunu öğrenmemiz gerekiyor. Ama ondan da önce Traverse Etmek ne demek ona bakalım

Traverse İşlemi

Traverse dolaşmak anlamına gelir. Bir veri dizisinin sonuna veya istenen noktaya gelebilmek için kullanılan döngüdür. Bu bir graf olabilir, mesela graftaki tüm düğümleri gezmek isteyebilirsiniz, ya da ağaç olur. Bu yazımızda hedef noktamız Linked List Traverse İşlemi olacak.

İlkin şu soruyu soralım, dizileri traverse etmeye gerek var mıdır? Mesela, dizinin belli bir konumuna eleman eklemek için tek tek dizinin diğer elemanlarını gezer miyiz? Elbette hayır. Mesela dizinin 4. indisine eleman eklemek istersek dizi[3] = x; yazar işi bitiririz. Ancak Abstract Data Types dediğimiz soyut veri tiplerinde bir konuma eleman ekleme, bir konumdan eleman silmek ve son konumu bulmak için Traverse yani dolaşma işlemini yapmamız gerekmektedir.

Linked List Traverse İşlemi

Linked List elemanlarının direkt olarak konumunu bulamayız.
Bağlı Liste

Mesela yukarıdaki Linked List yapımızda son elemanı bulmak istersek nasıl bulabiliriz hiç düşündünüz mü? yapımız direkt şöyle; 3=>4=>5=>6=>NULL

biz 6 elemanının kayıtlı olduğu düğümü bulmak istiyoruz. Eğer elimizde dizi veri yapısı olsaydı bu ifadeyi bulmak çok kolaydı. Ama Linked List'te de elimizde çok değerli bir bilgi var o da node->next

Yani biz her düğümden sonraki düğümün adresini tutuyoruz. Biz bir de Linked List'de ilk düğümü  head isimli bir değişkende tutuyoruz. Çoğu kişi bu noktayı kaçırır. Linked List'de ilk düğüm çok önemlidir. Onu bir değişkende tutmalıyız. Bu sayede tüm düğümleri traverse ederek son düğümü bulabiliriz. Şimdi bir önceki yazımızda 3 tane düğümden oluşan linked list yapısı oluşturmuştuk ya, onun kodlarının üzerine Traverse işlemini ekledim. Vurgulanmış satırların hepsi traverse işlemiyle ilişkili.

#include<stdio.h>

#include<stdlib.h>



struct node{

    int data;

    struct node *next;

};



int main()

{

    struct node* baslangic = NULL;

    struct node* ikinci = NULL;

    struct node* ucuncu = NULL;

    struct node* temp = NULL;





    baslangic = (struct node*)malloc(sizeof(struct node));

    ikinci = (struct node*)malloc(sizeof(struct node));

    ucuncu = (struct node*)malloc(sizeof(struct node));



    baslangic->data=1;

    baslangic->next=ikinci;



    ikinci->data=2;

    ikinci->next=ucuncu;



    ucuncu->data = 3;

    ucuncu->next = NULL;







    temp = baslangic;

    while(temp->next != NULL)

    {

        temp = temp->next;

    }



    printf("son elemanimiz %d", temp->data);



    return 0;

}

27. 63. 65. 69 ve 75. satırları inceleyelim.

27. satırda fazladan bir düğüm oluşturduk. Bu düğümü başlangıç değerini tutma amacıyla oluşturuyoruz.

Zaten 63. satırda, başlangıç düğümünü, temp düğümüne atadık. Bakın değer değil, direkt struct'ı atıyoruz.

65. satır, While döngümüzün başlangıcı. Temel şart son düğüme kadar dönmesi. Son düğümün next değeri null olunca son düğüme gelmiş demek oluyoruz.

69. satır ise esas traverse işlemini gerçekleştiriyor. Başlangıç adımından başladığını düşünelim,

1. Adımda Temp değerine temp->next değerini atadık. Yani temp değeri artık ikinci düğüm oldu.
2. Adımda Temp değerine temp->next değerini atadık. Yani temp değeri artık üçüncü düğüm oldu.
3. Adıma geçemiyoruz, çünkü artık temp->next değeri NULL oldu, şart bozulduğundan döngüden çıkıyoruz. Artık Temp değerimiz daha doğrusu temp->data değerimiz 3 oldu.

75. satırda ise temp düğümünün data değerini ekrana bastırıyoruz.


Mutlaka Ama Mutlaka Aşağıdaki Yazılara Göz Atın!

Linked List Eleman Ekleme İşlemi
Linked List Eleman Silme İşlemi

Etiketler: , , ,