Linear Queue와 Circular Queue의 차이점


<aside> 💡 선형큐와 원형큐는 어떤 기준을 통해서 큐의 상태를 판단하는가?

</aside>

선형큐의 경우 큐가 비어있는 상태는 rearfront가 같을 때, 큐의 포화상태는 rear == MAX_QUERE_SIZE -1이고 front가 선형큐 front의 초기값인 -1일 때 큐를 포화상태로 판단한다.

원형큐는 선형큐와는 다르게 상태를 판단한다. 원형큐가 비어있는 상태는 rear == front 이고 원형큐의 포화상태는 front == (rear+1) % MAX_QUERE_SIZE 이다.

이 때, 만약 원형큐의 rearfront의 초기값이 선형큐와 동일하게 -1로 시작한다면 MAX_QUEUE_SIZE 를 초과하는 큐 삽입이 발생했을 때의 제약인 (rear +1) % MAX_QUEUE_SIZE == front → isFull()이 작동하지 못해 큐 삽입에 대한 제약이 없어 무한정 큐삽입으로 인한 데이터 소실이 발생할 수 있다. 따라서 rear, front의 초기값을 0으로 두고 원형큐의 포화상태를 판단해야 한다.

<aside> 💡 왜 원형큐는 MAX_QUEUE_SIZE의 한 칸을 비워두는가?

</aside>

만약 원형큐의 MAX_QUEUE_SIZE의 한 칸을 비워놓지 않는다면 원형큐가 포화상태 일 때 rear == front 가 되고 원형큐의 비어있는 상태 여부 판단과 동일하게된다 큐가 포화상태 임에도 큐삭제에 제약이 걸리는 것이다. 따라서 원형큐의 포화상태 여부 판단을 위해서 MAX_QUEUE_SIZE를 한 칸 비워 놓고 원형큐의 포화상태 여부를 판단한다.