#include <stdio.h>
#include <stdlib.h>
//Queue bellek FIFO(İlk giren ilk çıkar) mantığı ile çalışır.
//Örneğin yazıcıdan birden çok çıktı alırken sıraya ilk alınan çıktı şilem tamamlandıktan sonra listeden çıkar ve sonraki çıktı gelir ve işlemler birbirleirni tekrarlar.
//Queue bellek ile liste dolduğunda sıfırlanır ve diğer elemanların gelmesi için yer açılmış olur.
#define QUEUE_SIZE 5//define(ön işlemci komutu) QUEUE_SIZE adında değişkenine 5 değerini atamıştır.
char queue[QUEUE_SIZE] = {0};//char tipinde queue adında değişken QUEUE_SIZE kadar değer verilmiştir ve ilk indisine 0 değerini atamıştır.
int head=0,tail=0;//head ile listenin başını temsil eden bir değişken ve tail ilede her girilen karkater birimini temsil eden değişkeni tanımlamış olduk.
void add(char c)//c değişkenine değer gönderilir. değer tail’ıncı indisine yollanır. tail değişkeni QUEUE_SIZE’dan büyük eşit olması durumunda tail 0 lanır ve sınırı aşan değerler 0.indisden itibaren queue dizisine gönderilir.
{
queue[tail++]=c;//queue dizisinin tail’nci indisine c karakterini yolla ve taill’ı bir arttır
if(tail>=QUEUE_SIZE) tail=0;//tail’in uzunluğu QUEUE_SIZE dan büyük ve eşit olması halinde tail=0 olur ve sığmayan değerler 0.indisten itibaren yeniden yazılır
}
int empty()
{
return head==tail;//listenin başını temsileden head ile bulunduğumuz birimi temsil eden tail eşit olması halinde true döndürür
}
char get()
{
if(empty()) return ‘\0’;//empty() fonksiyonundan dönen değer true ise ifadenin souna \0 koy
if(head>=QUEUE_SIZE) head=0;//listenin başını ifade eden head değişkeni QUEUE_SIZE den büyük olması halinde head=0 olsun
return queue[head++];//queue dizisinin head’ncı indisini döndür ve head’ı bir arttır
}
int main(int argc, char *argv[])
{
char c;
printf(“Bir cumle giriniz: “);
for(;;)
{
if((c=getchar())==‘\n’) break;//kullanıcının girdiği metnin her karakterini c ye atayan ve girilen karakter ‘\n’ ifadesine yani bittiğini temsil etmesi durumunda döngüden çıkılır
printf(“%c”,c);//girilen karkater ekrana yazdırılır.
add(c); //c karakterini add() fonksiyonu ile git ve diziye ekle
}
printf(“\nGirilen cumle: “);
while(!empty()) printf(“%c”, get());//eğer empty() false dönerse ekrana get() fonksiyonujndan dönen değeri ekrana yazdır
printf(“\n”);
system(“PAUSE”);
return 0;
}