A sentimental robot

CircularQueue 본문

카테고리 없음

CircularQueue

GOD03219 2018. 1. 3. 13:25

#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(비어있는 앞자리로 한칸씩 이동)가 필요없다.