원형큐에서 %를 사용하는 이유
큐가 꽉 차 있는지 확인하고 위함이라고 생각한다.
int is_full(queue *q) {
if (q->front == (q->rear + 1)%MAX_QUEUE_SIZE) {
return 1;
}
else {
return 0;
}
}
(rear+1) % MAX_QSIZE는 0이 나올 것이다, front는 0이기에 원형 큐가 가득 차있다고 결론 내릴 수 있다.
8 나누기 8의 나머지는 0이기 때문이다.
같은 방식으로 enqueue에서도
q->rear = (q->rear + 1) % MAX_QUEUE_SIZE;
이렇게 %를 사용해서 MAX_QUEUE_SIZE로 나눈 나머지를 구하는 방법을 사용한다.
q->rear가 MAX_QUEUE_SIZE보다 크다면 q->rear를 MAX_QUEUE_SIZE로 나눈 나머지가 q->rear의 값을 가리키지 않게 된다.
예) 5%3 = 2
반면
q->rear가 MAX_QUEUE_SIZE보다 작다면 q->rear를 MAX_QUEUE_SIZE로 나눈 나머지가 q->rear의 값을 가리키게 된다.
예) 3%5 = 3
q->rear가 MAX_QUEUE_SIZE보다 크다면 프로그램이 이상하게 실행될 것이다.