Home / Veri Yapıları / Bağlı Liste (Linked List) – Araya Eleman Ekleme

Bağlı Liste (Linked List) – Araya Eleman Ekleme

Bağlı listelerde araya eleman ekleme işlemi hem kolay hem zordur. Ne demek istediğimizi şöyle anlatabiliriz, dizilerle karşılaştıracak olursak araya eleman ekleme işleminde kaydırma yapmak zorunda kalmayız. Ancak dizilerdeki gibi de Random Access, daha doğrusu direkt erişim yapamayız. Yani 3. indise eleman eklemek istiyorsak, direkt olarak 3. indise varamayız.

Peki Bağlı liste araya eleman ekleme işlemi nasıl oluyor? bunu Bağlı Liste sona eleman ekleme işlemi gibi düşünebilirsiniz. Tek fark, gidilecek yer listenin sonu değil, her hangi bir yer olmalıdır. Şimdi aşağıya bir göz atalım.

3 => 6 => 9 => 15 =>18

Yukarıdaki gibi bir bağlı listemiz olsun. Ve biz ikinci indisin (yani 9’un) önüne 12 sayısını eklemek isteyelim. Bu işlemi yapmak için 9 sayısına kadar traverse yapmalıyız. ve 9’un next değerine eklemek istediğimiz değeri eklemeliyiz.

Yani 9 sayısını tutan düğüm “aranan” olsun.

Mevcut durumdaki (sayımızı eklemeden önce) 9 sayısının next değerini(15) de temp düğümünü atayalım.  temp = aranan->next

Şimdi aranan->next = yeniDugum dersek 9 sayısının önüne 12 sayısını eklemiş oluruz. ancak işimiz bitmedi. 15 sayısını şu an hiçbir düğüm işaret etmiyor. biz boşuna temp değerini oluşturmadık.

yeniDugum->next = temp diyerek eklemeyi yapıyoruz.

 

Bağlı Liste Araya Eleman Ekleme C Kodu


//düğümümüz için struct yapısı
struct node{
    int data;
    struct node *next;
};
//Başlangıç düğümü start ve rastgele düğüm tutmak için temp değişkenleri
struct node* start = NULL;
struct node* temp;

//Bu fonksiyon ile düğüm oluşturuyoruz
struct node* createNode()
{
    struct node* newNode = (struct node*)malloc(sizeof(struct node));
    return newNode;
}
//fonksiyonumuz verilen index noktasına eleman (int z) ekleyecektir.
void addPos(int z, int index)
{
    int counter = 0;
    struct node* anywhere = createNode();
    anywhere->data = z;
    temp = start;
    //eğer index sıfır ise başa eleman ekleme fonksiyonunu çağırıyor, daha önceki yazımızda paylaşmıştık
    if(index == 0)
    {
        addFirst(z);
    }
    else
    {
            //traverse işlemi başlangıcı
            while(temp != NULL)
            {
                //Eğer sayacımızın 1 fazlası index'e eşit olursa break ile çıkıyoruz göngüden  
                if(counter+1 == index)
                    break;
                temp = temp->next;
                counter++;
            }
            struct node* temp1;
            // arasına eleman ekleyebilmemiz için bir sonraki değerin elde tutulması gerekiyor
            temp1 = temp->next;
            // Eleman ekleme işlemi burada yapılıyor
            temp->next = anywhere;
            // Yeni eklenen eleman sonraki elemanı gösteriyor
            anywhere->next = temp1;
    }

}

Bağlı Liste Araya Eleman Ekleme Video

Bir cevap yazın

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