 |
bağlı liste işlemler |
Bir önceki yazımızda Linked List Baştan Eleman Silme işlemi konusunu anlatmıştık. Bu yazımızda ise aradan eleman silme işleminin nasıl gerçekleştirileceğini anlatacağız. Aradan eleman silme işlemi aslında 3 ayrı durumu da içerisinde bulundurur. Fonksiyonumuz silinecek sayının parametresini alacağı için karşılaştırma işlemi yapacağız. Eğer verilen sayı baştaki sayı ise baştan eleman silme işlemi, eğer verilen sayı sondaki sayı ise sondan eleman silme işlemi gerçekleşmeli. Aslında üç ayrı fonksiyon yerine tek fonksiyonda işi bitirebilirdik, ancak üçü de ayrı durumlar olduğu için biz 3 ayrı fonksiyon halinde ele aldık.
NOT: Şimdi anlatacağımız Bağlı Listeler Aradan Eleman Silme işleminde baş ve son elemanlarının silinmeyeceği varsayılmalı! Onlar için ayrı statement oluşturup ilgili fonksiyonları çağırabilirsiniz.
Linked List Aradan Eleman Silme İşlemi C Kodu
void verileniSil(int verilen)
{
struct node* starticin = (struct node*)malloc(sizeof(struct node));
struct node* prev = (struct node*)malloc(sizeof(struct node));
struct node* next = (struct node*)malloc(sizeof(struct node));
starticin = start;
while(starticin->next->data!=verilen)
{
starticin = starticin->next;
}
prev = starticin;
next = starticin->next->next;
prev->next = next;
}
Yukarıda öncelikli olarak 3 tane node oluşturduk. starticin değişkenini start değerini tutmak için, prev değişkenini silinecek elemandan bir öncesini tutmak için, next değişkenini de silinecek elemanın bir sonrasını tutmak için oluşturduk.
27 => 55 => 11 => 19 => 25
Eğer 11 sayısını silmek istersek 55 sayısını tutan düğüme prev düğümü dersek prev->next = next olmalı. (buradaki next ifadesi oluşturduğumuz next düğümünün ta kendisi, aman karıştırmayın)
Şimdi starticin = start; satırından devam ediyorum. start değerini bir değişkene aktarıyoruz. Bunun temel sebebi start değişkenimiz bozulmasın diyedir. Çünkü traverse yapacağız.
While döngümüze geldik. starticin->next->data demek bir öndeki düğümün tuttuğu data değeri demektir. Bu döngü, değeri tutan düğüme kadar değil, değeri tutan düğümden bir önceki düğüme kadar döner. Yani starticin değişkeninin değeri, döngü bittiğinde parametre ile verilen değeri tutan düğümden bir önceki düğüm olur.
prev = starticin; dediğimizde verilen değeri tutan düğümün bir öncesindeki düğümü prev düğümüne aktarmış oluruz.
next = starticin->next->next düğümü ise verilen değeri tutan düğümden bir sonraki düğümdür. Mantık şudur, öncesindeki düğümü, sonrasındaki düğüme aktaracağız ki, aradaki düğüm yok olsun.
prev->next = next; satırıyla işi bitirmiş olduk. yani
27 => 55 => 19 => 25 (burada 55 prev, 19 ise next değeridir, silinen 11 değerinin tuttuğu düğüm starticin->next düğümüdür.)
NOT: Bu fonksiyona başlangıç ya da son değeri gönderirseniz patlar. Fonksiyonu iyileştirmeniz mümkün. şöyle anlatayım;
if(verilen == start->data) deyip bastanSil() fonksiyonunu çağırabilirsiniz.
if(starticin->next->next == NULL) derseniz de sondanSil() fonksiyonunu çağırabilirsiniz. Böylece baştan ve sondan değer girdiğinizde fonksiyonunuz patlamaz. Hadi kolay gelsin :)
Linked List Baştan Eleman Silme İşlemi için ilgili makalemize bakabilirsiniz.
Linked List Sondan Eleman Silme İşlemi için ilgili makalemize bakabilirsiniz.Etiketler: bağlı liste aradan eleman silme, Bağlı Listeler Aradan Eleman Silme, linked list aradan eleman silme, linked list verilen elemanı silme