Dizi Arama İşlevleri
Önceki IX. Oylum - Arama ve Sıralama Sonraki
Dizi Arama İşlevleri
Genel olarak bir dizi içindeki belli bir elemanın aranması, hemen hemen tüm elemenlara bakılmasını gerektirir. GNU C kütüphanesi düzgün doğrusal arama yapan işlevleri içerir. Aşağıdaki iki işlevin prototipleri search.h başlık dosyasında bulunabilir.
void *lfind
(const void      anahtar,
 void           *başlangıç,
 size_t         *üye-sayısı,
 size_t          boyut,
 comparison_fn_t karş-işlevi)
işlev
Bu işlev, başlangıç'tan itibaren boyut baytlık *üye-sayısı elemanlı bir dizide anahtar tarafından gösterilen bir eşleşmeyi içeren elemanı arar. karş-işlevi ile gösterilen işlev iki elemanın karşılaştırılması için kullanılır.
Dönen değer, başlangıç’ta başlayan dizide bulunmuşsa eşleşen eleman için bir gösterici ile döner, eşleşen eleman yoksa NULL döner.
Bu işlevin ortalama çalışma süresi *üye-sayısı/2 dir. Bu işlev, genellikle sadece, arama yapmadan önce bazı elemanların diziye eklenmesi veya diziden silinmesinin dizinin sıralanması açısından pek kullanışlı olmayabileceği durumda kullanılmalıdır.
void * lsearch
(const void      anahtar,
 void           *başlangıç,
 size_t         *üye-sayısı,
 size_t          boyut,
 comparison_fn_t karş-işlevi)
işlev
Bu işlev lfind işlevine benzer. Verilen dizide bir elemanı arar ve bulduğunda bu elemanla döner. Farklı olarak, bir eşleşme bulunamazsa, anahtar ile gösterilen nesneyi (boyut baytlık olarak) dizinin sonuna ekler ve bu eklemeyi belirtmek için *üye-sayısı değerini bir arttırır.
İşlevi çağıran açısından bunun anlamı, dizinin elemanı içerdiğinden emin olamıyorsanız, başlangıç’ta başlayan dizi için ayrılan bellekte en azından boyut baytlık kullanılmamış alanın bulunmasının gerekliliğidir. lsearch işlevi çağrılırken daima bellekte yeterli yerin bulunması gerektiğinden, dizinin aranan elemanı içerdiğinden eminseniz lfind işlevini kullanmak daha iyidir.
Anahtarla eşleşen bir elemanı sıralanmış bir dizide aramak için bsearch işlevini kullanın. Bu işlevin prototipi stdlib.h başlık dosyasındadır.
void *bsearch
(const void      anahtar,
 const void     *dizi,
 size_t          üye-sayısı,
 size_t          boyut,
 comparison_fn_t karş-işlevi)
işlev
Bu işlev, boyut baytlık üye-sayısı eleman içeren önceden sıralanmış dizi dizisinde anahtar'a eşdeğerde bir nesneyi arar.
karş-işlevi, karşılaştırma yapmak için kullanılır. Bu işlev iki argümanla çağrılabilmeli ve birinci argümanın ikinci argümandan küçük, büyük ya da ona eşit olması durumlarına bağlı olarak sırasıyla sıfırdan küçük, büyük bir değerle ya da sıfır ile dönmelidir. dizi dizisinin elamanları bu karşılaştırma işlevi ile ilgili olarak artan sırada sıralanmış olmalıdır.
Eşleşme bulunmuşsa dönen değer eşleşen dizi elemanına bir göstericidir, aksi takdirde boş gösterici döner. Dizi birden fazla eşleşme içeriyorsa, dönen değerin hangi eleman olacağı belirlenmemiştir.
İşlev ikilik arama (binary search) algoritması kullanarak gerçeklendiğinden işlevin ismi bu algortimanın isminden türetilmiştir.
Önceki Üst Ana Başlık Sonraki
Karşılaştırma İşlevinin Tanımlanması Başlangıç Dizi Sıralama İşlevi
Bir Linux Kitaplığı Sayfası