*큐는 밀려드는 데이터를 순차적으로 처리하기 위해 고안됨
*순환 큐는 배열의 원소를 삽입,삭제할때 발생하는 땡기거나 밀어야 하는 비용을 없애고자 전단과 후단이라는 논리적인 개념을 도입한 큐
*실제 순환큐의 크기는 +1 하여 만들고, 비어있을때는 전단과 후단의 위치가 같고, 가득 찼을때는 후단이 전단보다 -1 작은 값을 가진다.
*순환큐의 삽입은 현재 후단의 위치에 삽입 후 ++한다. (++한 위치가 capacitiy와 같다면 배열의 처음으로 후단을 옮긴다.)
*순환큐의 삭제는 현재 전단의 위치를 ++증가시킨다.(덮어쓴다는 의미이다. ++한 위치가 capacity라면 배열의 처음으로 전단을 옮긴다.)
*이 순환큐에서는 포화상태를 확인할 때 1. 전단이 앞 후단이 뒤일 경우 그 차이가 capacity인지 확인하는것과 2.후단이 앞, 전단이 뒤일때는 후단 +1 이 전단인지 확인하는 두가지 방법이 있다.
typedef int ElementType;
typedef struct tagNode {
ElementType Data;
}Node;
typedef struct tagCircularQueue {
int Capacitiy;
int Front;
int Rear; //capacity +1 값을 가진다.
Node *nodes;
} CircularQueue;