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;
}

Yorumlar

  1. Fatih Kabakci

    int tek(int x){
    if(x%2==1)
    return 1;
    else
    return 0;
    }
    int buyuk(int x){
    return x>=3;
    }
    int filter(int *a,int s,int (*fp)(int)){
    int b=s;
    for(int i=0;i

  2. Fatih Kabakci

    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?

Bir cevap yazın

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