코드 5-7의 is_full() 메서드는 원형 큐가 가득 찼는지 확인합니다. 이때 바로 rear에 1을 더한 후 front와 비교해서는 안 됩니다. 먼저 rear를 __step_forward() 메서드로 이동시킨 후 이를 front와 비교해야 합니다. rear가 다음으로 이동할 곳이 front와 같다면 이는 원형 큐가 가득 찼다는 것입니다.
코드 5-8
def enqueue(self, data):
if self.is_full():
raise Exception("The queue is full")
self.container[self.rear] = data
self.rear = self.__step_forward(self.rear) ➊
➊ rear는 마지막 데이터의 다음을 가리킵니다.
코드 5-8은 원형 큐에 데이터를 삽입하는 enqueue() 메서드입니다. rear가 동적 배열에 있는 마지막 데이터의 다음을 가리키므로 먼저 데이터를 rear 위치에 추가하고 rear를 뒤로 이동시킵니다.
코드 5-9
def dequeue(self):
if self.is_empty():
raise Exception("The queue is empty")
ret = self.container[self.front]
self.front = self.__step_forward(self.front)
return ret