Filitreleme Tipi Fonksiyonlar (Filter Type Functions)

Yazan : Şadi Evren ŞEKER

Bir veri yapısı üzerinde çalışan ve veri yapısında bulunan verileri, verilen bir fonksiyonu kullanarak eleyen (filitreleyen) fonksiyon tipidir. Bu durum aşağıdaki bağlı liste (linked list) örneğinden anlaşılabilir:

Örneğin yukarıdaki bağlı liste üzerinden tek sayıları eleyen bir fonksiyon yazmak istersek yapmamız gereken, tek sayıları veren aşağıdaki fonksiyonu bu bağlı liste üzerine filitre tipinde uygulamaktır.

int tek(int a){

return a%2==1;

}

Yukarıdaki fonksiyon tek sayılarda 1 ve çift sayılarda 0 döndürmektedir (C dilinde 1’in olumlu (doğru, true) ve 0’ın olumsuz (yanlış, false) olduğunu hatırlayınız). Yukarıdaki bu fonskiyonu, fonksiyon göstericisi (function pointer) kullanarak aşağıdaki filter fonksiyonuna parametre verebiliriz:

node *filter ( node *root, int (*pt2Func)(int)){
   node * iter = root;
   while(iter->next != root){
         if(pt2Func(iter->next->data)){
            node * temp=iter->next;
            iter->next = iter->next->next;
            free(temp);
         }
         iter = iter->next;
   }
   if(pt2Func(root->data)){
         node*temp=root;
         root=root->next;
         free(temp);
   }
   return root;
}

2 COMMENTS

  1. int b=filter(a,6,buyuk);
    b=filter(a,b,tek);

    ve bu bolumde ‘tek’ fonksiyonu icin; int b=filter(a,b,tek);
    diyerek uygulayıp,’buyuk’ fonksiyonunda bu sekil uyguladıgımızda= b=filter(a,6,buyuk) sonucun ekranda vermedigini hata olarak algıladıgını gordum.bunun sebebi sizce nedir?

LEAVE A RESPONSE

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir