# 원형 큐Queue.cpp큐는
FIFO(First-In First-Out)라고하는 선입 선출의 자료구조이다.
일반 배열을 사용한 큐는 배열의 앞부분이 비어있더라도 사용하지 못하는 단점이 있고 이를 보안하기 위해
대량의 데이터 이동을 하여야 하는 반면 원형큐는 배열을 원형의 구조로 만듬으로써 메모리 낭비를 줄일수 있다.
#include <stdio.h>
#define MAX_QUEUE_SIZE 100
typedefstruct{
int queue[MAX_QUEUE_SIZE];
int front,rear;
}QueueType;
void Init(QueueType *q)
{
q->front = q->rear = 0;
}
int is_empty(QueueType *q)
{
return (q->front == q->rear);
}
int is_full(QueueType *q)
{
return ((q->rear+1) % MAX_QUEUE_SIZE == q->front);
// rear의 다음칸이 front라면 포화상태
}
void Enqueue(QueueType *q,int data)
{
if(is_full(q))
{
printf("큐가 포화상태 입니다\n");
return ;
}
q->rear=(q->rear+1)%MAX_QUEUE_SIZE; // rear의 값은 0~99 유지
q->queue[q->rear]=data;
}
int Dequeue(QueueType *q)
{
if(is_empty(q))
{
printf("큐가 공백상태 입니다.\n");
return -1;
}
q->front=(q->front+1)%MAX_QUEUE_SIZE; // front의 값은 0~99 유지
return q->queue[q->front]; // 삭제 데이터 반환
}
int Peek(QueueType *q)
{
if(is_empty(q))
{
printf("큐가 공백상태 입니다.\n");
return -1;
}
return q->queue[q->rear];
}
int main()
{
QueueType q;
int i;
Init(&q);
for(i=0;i<10;i++)
{
Enqueue(&q,i+10);
printf("Enqueue() : data = %d, front = %d, rear = %d\n",Peek(&q),q.front,q.rear);
}
puts("-------------------------------------------");
for(i=0;i<10;i++)
printf("Dequeue() : data =%d, front = %d, rear = %d\n",Dequeue(&q),q.front,q.rear);
puts("-------------------------------------------");
printf("현재 상태 : front = %d, rear = %d\n",q.front,q.rear);
return0;
}