Çift Yönlü Bağlı Liste Silme Fonksiyonu
C Programlama Dili Çift Yönlü Bağlı Liste Silme Fonksiyonu
C programlama dili veri yapılarındaki şimdi ki konumuz çift yönlü bağlı liste silme fonksiyonu. Silme fonksiyonunda daha önce bahsettiğimiz ekleme fonksiyonu ile eklemesini yaptığımız bağlı listeden kullanıcıdan alınan sayıyı silme işlemi yapacağız. Bu fonksiyonda da eklemede kullandığımız struct yapısını kullanacağız. Öncelikle struct yapımıza bir bakalım.
1 2 3 4 5 6 7 |
typedef struct list { int sayi; struct list *onceki; struct list *sonraki; } liste; liste *ilk = NULL, *gecici = NULL,*sil = NULL; |
Struct yapımız bu şekildedir. Bu struct türünden ise 3 pointer değişkenimiz var. Bunlar ilk düğümü barındıran “ilk” adında pointer değişkeni, sileceğimiz düğümü tutacak olan “sil” adında pointer değişkeni ve son olarak listede gezerek arama yapacağımız “gecici” adındaki pointer değişkenimiz. Şimdi silme fonksiyonumuz üzerinden konumuzu anlatalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
void silme(int sayi) { gecici = ilk; if (gecici == NULL) { printf("Listede Eleman Bulunmamaktadir...\n"); return 0; } else { while(gecici != NULL){ if(gecici->sayi == sayi){ sil = gecici; gecici = gecici->onceki; gecici->sonraki = sil->sonraki; sil->sonraki->onceki = gecici; free(sil); printf("%d sayisi silinmiştir...\n",sayi); return 0; } gecici = gecici->sonraki; } } printf("%d sayisi listede yoktur...\n",sayi); } |
- Listemize parametre olarak integer veri tipinde bir sayı gönderiyoruz.
- İlk düğümü kaybetmemek için listede gezme işlemini yapacak olan “gecici” değişkenine “ilk” değerini atıyoruz.
- Daha sonra gecici düğümümüz boş mu diye bir kontrol ifadesi yazıyoruz.
- Liste boş ise bunun uyarısını verip programı return ile sonlandırıyoruz.
- Eğer listemiz boş değil ise else bloğuna geçeriz ve bunun içerisinde bir while döngüsü yaparız.
- while döngümüz gecici değişkenimiz boş (NULL) oluncaya kadar devam edecektir.
- Gecici değişkenimiz içerisindeki sayıyı tutan “gecici->sayi” ile kullanıcıdan gelen “sayi” parametresini karşılaştırırız.
- Eğer eşit ise bu iki değer silme işlemini yapacağımız kısma geçmiş oluruz.
- Öncelikle burada “sil” pointerı içerisine “gecici” pointer değerini atarız.
- Daha sonra gerekli bağlantılar için “gecici” değişkenimizi bir geriye yani “gecici->onceki” düğümüne atarız.
- Artık gecici değişkeni sil değişkeninin bir öncesinde olmuş olur.
- Aradaki bağlantının kopmaması için “gecici->sonraki” düğümüne “sil->sonraki” değerini atarız.
- Böylece gecici değişkeninden sonra gelen düğüm sil değişkeni değil sil değişkeninden bir sonraki düğüm olmuş olur.
- Yalnız işimiz henüz bitmedi, konumuz çift yönlü bağlı liste olduğundan sil->sonraki->onceki = gecici ataması ile silden sonraki düğümün onceki adlı değişkeni gecici değişkenine bağlanmış olur.
- Ve artık gönül rahatlığı ile sil pointerını free fonksiyonu ile silebiliriz.
- Sonrasında ise silindiğini gösteren uyarı verilir ve program sonlandırılır.
- Kod üzerindeki return işlemleri hiç devreye girmedi ise listemiz ne boştur ne de istenen eleman listede bulunup silinmiştir. Geriye kalan tek ihtimal de aranan elemanın listede olmayışıdır.
- Son olarak da bu ihtimaden dolayı aranan eleman listede yoktur uyarısı verilerek program sonlandırılır.
Çift yönlü bağlı listemizin silme fonksiyonu bu şekildedir. Daha fazla konu anlatımı ve örnek soru için sitemizi takip etmeye devam edin.
Leave a reply
Lütfen yorum için giriş yap ve yakayıt ol Teşekkürler .