Queue(kuyruk) bellekte First In First Out kuralı vardır. Yani veriyi okumak
istersek ilk girilen değer ilk okunur. Bu sefer sadece main.c ile değil
oluşturacağımız 2 dosya ile daha çalışacağız.
main.c, queuedynamic.c(bellekten yer alma ve veri ekleme),
queuedynamic.h(fonksiyonların deklarasyonları) dosyalarımız olacak.
main.c
//sol tarafta projecten projenin adına sağ tıklayıp new file yapıyoruz //sonra queuedynamic.c ve queuedynamic.h oluşturuyoruz #include <stdio.h> #include <stdlib.h> #include "queuedynamic.h" int sayi; int main() { printf("bitirmek icin 0 girinizn"); do { printf ("sayi giriniz:"); scanf("%d",&sayi); add(sayi); //fonksiyona sayilari gönderiyoruz. }while (sayi>0); //0 girilene kadar printf("n"); while(!empty()) { printf ("%dn",get()); //getle okuma işlemi } return 0; }
queuedynamic.c
#include <stdio.h> #include <stdlib.h> #include "queuedynamic.h" int i; int *queue=NULL; //queue belleği tutan bellek kodu int size=0; void add(int data) { int *tmp= (int*)realloc(queue,sizeof(int)*(size+1)); //daha önce bu yer alınmış veya hiç alınmamış olabilir. //mevcut yeri almak için realloc kullanıyoruz. if(tmp==NULL) return; //yer alındımı kontrol ediyoruz. queue=tmp; //yer aldık değeri aktardık. queue[size++]=data; //önce queue belleğe datayı aktardık sonra datanın kendisini //bir arttırdık. } int get() { int data=queue[0]; //kuyrugun ilk elemanını geçici data değişkenine aldık. //her bir datayı bir sonrakine ötelemek için döngüyü kuruyoruz. for (i=1;i<size;i++) { queue[i-1]=queue[i]; //her seferinde queue değerine bir digerini aktar. //ilk olarak q[0]'a q[1]'i aktar. } queue=(int*)realloc(queue,sizeof(int)*(--size)); ////queue bellek boyutunu düşürdük. return data; } int empty() { return size==0; }
queuedynamic.h
void add(int veri); //kullandığımız fonksiyonların deklarasyonları int get(); int empty();