C Programlama Yığın ve Kuyruk




Bir önceki dersimizde yığın hakkında bilgi vermiştik yığın hakkında bilginiz yok ise buraya tıklayarak yığın dersimize gidebilirsiniz.

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

Yorum Gönder

2 Yorumlar

Bizimle fikirlerinizi paylaşabilirsiniz.