Arama ve Sıralama Örneği
Önceki IX. Oylum - Arama ve Sıralama Sonraki
Arama ve Sıralama Örneği
Bu örnekte, bir yapılar dizisi ile qsort ve bsearch işlevlerinin kullanımı gösterilmiştir. Dizideki nesneler name alanlarına göre strcmp işlevi kullanılarak sıralanmakta ve nesnelere isimleri ile bakılmaktadır.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

/* Sıralanacak gösteri karakterlerine bir dizi tanımlayalım. */

struct critter
{
  const char *name;
  const char *species;
};

struct critter muppets[] =
{
  {"Kermit", "frog"},
  {"Piggy", "pig"},
  {"Gonzo", "whatever"},
  {"Fozzie", "bear"},
  {"Sam", "eagle"},
  {"Robin", "frog"},
  {"Animal", "animal"},
  {"Camilla", "chicken"},
  {"Sweetums", "monster"},
  {"Dr. Strangepork", "pig"},
  {"Link Hogthrob", "pig"},
  {"Zoot", "human"},
  {"Dr. Bunsen Honeydew", "human"},
  {"Beaker", "human"},
  {"Swedish Chef", "human"}
};

int count = sizeof (muppets) / sizeof (struct critter);


/* Sıralama ve arama için kullanılacak karşılaştırma işlevi. */

int
critter_cmp (const struct critter *c1, const struct critter *c2)
{
  return strcmp (c1->name, c2->name);
}


/* Bir karakter hakkında bilgi basalım. */

void
print_critter (const struct critter *c)
{
  printf ("%s, the %s\n", c->name, c->species);
}

/* Sıralanmış dizi üzerinde arama yapalım. */

void
find_critter (const char *name)
{
  struct critter target, *result;
  target.name = name;
  result = bsearch (&target, muppets, count, sizeof (struct critter),
                    critter_cmp);
  if (result)
    print_critter (result);
  else
    printf ("Couldn't find %s.\n", name);
}

/* Main işlevi. */

int
main (void)
{
  int i;

  for (i = 0; i < count; i++)
    print_critter (&muppets[i]);
  printf ("\n");

  qsort (muppets, count, sizeof (struct critter), critter_cmp);

  for (i = 0; i < count; i++)
    print_critter (&muppets[i]);
  printf ("\n");

  find_critter ("Kermit");
  find_critter ("Gonzo");
  find_critter ("Janice");

  return 0;
}
Yazılımın çıktısı:
Kermit, the frog
Piggy, the pig
Gonzo, the whatever
Fozzie, the bear
Sam, the eagle
Robin, the frog
Animal, the animal
Camilla, the chicken
Sweetums, the monster
Dr. Strangepork, the pig
Link Hogthrob, the pig
Zoot, the human
Dr. Bunsen Honeydew, the human
Beaker, the human
Swedish Chef, the human

Animal, the animal
Beaker, the human
Camilla, the chicken
Dr. Bunsen Honeydew, the human
Dr. Strangepork, the pig
Fozzie, the bear
Gonzo, the whatever
Kermit, the frog
Link Hogthrob, the pig
Piggy, the pig
Robin, the frog
Sam, the eagle
Swedish Chef, the human
Sweetums, the monster
Zoot, the human

Kermit, the frog
Gonzo, the whatever
Couldn't find Janice.
Önceki Üst Ana Başlık Sonraki
Dizi Sıralama İşlevi Başlangıç İsim-Değer Çiftleri ile Arama İşlevi
Bir Linux Kitaplığı Sayfası