Bu dersimizde kuyruğu anlatarak kod örneğimizi vereceğiz.
Kuyruk veri yapısı Veri Yapıları arasında en öne çıkanlardan bir tanesidir. Mantalite olarak ilk giren elemanın ilk çıkması gözetilir. Yani First In First Out yapısı mevcuttur.
Kuyruk veri yapısını gerçek hayattaki kuyruk gibi düşünebilirsiniz, kuyruğun en önündeyseniz ilk sizin işiniz biter, kuyruğun ne kadar gerisindeyseniz işiniz o kadar gecikecektir. ATM kuyrukları, ekmek kuyrukları vs…
Peki bilgisayar ortamında kuyruk veri yapısını nasıl tutabiliriz? Bizim işimiz bilgisayara bu işlemi yaptırmak üzerinedir. Kuyruk veri yapısında da, Stack veri yapısında olduğu gibi iki model kullanılır. Birincisi Dizi ile, diğeri bağlı liste ile kuyruk yapısını tutmak üzerinedir.
Kuyruk veri yapısını oluştururken tutmamız gereken iki önemli bilgi bulunmaktadır. Bunlardan birincisi en öndeki elemanı tutan Front bilgisi, diğeri ise kuyruğun en sonundaki elemanı tuttuğumuz Rear elemanıdır.
Mantık basittir, Kuyruğa yeni giren eleman, kuyruğun mevcut durumda en arkadaki elemanının (Rear) arkasına gelir ve en sondaki kişi güncellenerek kuyruğa yeni giren kişi olur. Eğer kuyruktan çıkış olmadıysa en öndeki eleman (Front) değişmez, Front değeri kuyruğa ilk eleman eklendiğinde oluşturulur. Kuyruktan eleman çıktıkça güncellenir. Aşağıdaki yapıya göz atalım.Bu kodda hem kuyruk hemde yığın veri yapısı aynı anda ele alınmıştır.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct binary{
int d;
struct binary *n;
}LST;
int main(){
char sayi[32];
int sayi1=0,sayi2=0,i;
LST *p,*q,*ilk,*kp;
ilk=kp=new LST;
q=new LST;
q->n=new LST;
q->n->d='\0';
printf("Binary Halinde Bir Sayi Giriniz(1000100101 Seklinde) : "); scanf("%s",sayi);
ilk->d=sayi[0];
q->d=sayi[0];
for(i=1;sayi[i]!='\0';i++){
p=new LST;
p->d=sayi[i];
p->n=q;
p=q;
kp->n=new LST;
kp=kp->n;
kp->d=sayi[i];
}
kp->n=new LST;
kp->n->d='\0';
i=0;
printf("Kuruk\tYigin\n");
for(;q->d!='\0';){
if(q->d=='1'){
sayi1+=pow(2,i);
}
if(ilk->d=='1'){
sayi2+=pow(2,i);
}
printf("%c\t%c\n",ilk->d,q->d);
p=q;
q=q->n;
free(p);
p=ilk;
ilk=ilk->n;
free(p);
i++;
}
printf("\nKuyruktaki Sayi : %d\nYigindaki Sayi : %d",sayi2,sayi1);
printf("\n\n");
system("pause");
return 0;
}
2 Yorumlar
Güzel içerikler için teşekkür ederim.
YanıtlaSilRica Ederiz.
YanıtlaSilBizimle fikirlerinizi paylaşabilirsiniz.