더북(TheBook)

그림 5-3은 원형 큐의 작동 원리를 나타냅니다. 이전 절에서 구현은 dequeue 연산마다 모든 데이터를 한 번씩 이동시킨다는 문제점이 있었습니다. 이 문제를 해결하는 것은 간단한데, 데이터를 모두 이동시키는 것이 아니라 front를 뒤로 한 번만 이동시키면 됩니다. 그럼 이전에 front가 가리키던 데이터는 삭제된 것과 같습니다. 하지만 이 해결책에도 문제점이 하나 있습니다. 매번 dequeue 연산을 할 때마다 동적 배열의 앞부분이 하나씩 비게 되고 enqueue 연산은 계속되어 rear가 동적 배열의 맨 마지막에 도달했을 때는 앞부분에 데이터를 저장할 충분한 공간이 있음에도 큐가 가득 찼다고 판단하게 되는 것입니다. 이 문제점은 선형적인 동적 배열을 원형으로 이어 붙이면 해결할 수 있습니다. 논리적으로 이렇게 구성하면 rear가 동적 배열의 맨 마지막에 도달했을 때는 동적 배열의 맨 처음을 가리키게 하여 빈 공간에 데이터를 추가하면 되는 것이지요.

원형 큐를 구현하는 한 가지 팁은 원형 큐가 비어 있을 때와 가득 찼을 때를 구분하기 위해 rear를 실제 데이터의 마지막 다음을 가리키게 하는 것입니다. 그림 5-3에 잘 표현되어 있습니다. 이렇게 하면 원형 큐가 비어 있을 때는 front가 rear와 같아지고, 가득 찼을 때는 rear+1이 front와 같아집니다. 또 front나 rear가 동적 배열의 맨 마지막에 도달했을 때 맨 처음으로 이동시켜 줄 편의 메서드를 하나 두면 훨씬 쉽게 구현할 수 있습니다.1

 

 


1 코드 5-4~코드 5-11은 circular_queue.py 파일에 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.