CircularQueue
#include<stdio.h>
int Enqueue(struct Queue*q, int data);
int Dequeue(struct Queu *q, int *data);
struct Queue
{
int data[6];
int front;
int rear;
};
int Enqueue(struct Queue*q, int data){
if((q->rear+1)%6 == q->front) return 0; // int data[5]( full state )일 때, 값을 넣지 못하게 함
q->data[q->rear%6] = data; // int data[6]이면 int data[0]이 되도록 (환영큐)
q->rear++;
// q->data[q->rear++%6]=data;
return 1;
}
int Dequeue(struct Queue *q, int *data){
if(q->front == q->rear) return 0; // empty state
*data=q->data[q->front%6];
q->front++;
// *data=q->data[q->front++%6];
return 1;
}
void main()
{
struct Queue q={0};
int data;
Enqueue(&q,10);
Enqueue(&q,20);
Enqueue(&q,30);
Enqueue(&q,40);
Enqueue(&q,50);
Enqueue(&q,90);
Dequeue(&q,&data); printf("%d\n",data);
Dequeue(&q,&data); printf("%d\n",data);
Enqueue(&q,60);
Enqueue(&q,70);
Enqueue(&q,80);
Dequeue(&q,&data); printf("%d\n",data);
Dequeue(&q,&data); printf("%d\n",data);
Dequeue(&q,&data); printf("%d\n",data);
Dequeue(&q,&data); printf("%d\n",data);
Dequeue(&q,&data); printf("%d\n",data);
}
// 선형큐와 달리 shift(비어있는 앞자리로 한칸씩 이동)가 필요없다.