C DERS 28: QUEUE DYNAMIC

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();