

정해진 길이 n의 리스트 확보, Q = Queue()
Q.enqueue(A)
Q.enqueue(B) Q.euqueue(C) Q.euqueue(D)
r1 = Q.dequeue() (=A)
r2 = Q.dequeue()
Q.enqueue(F)
→ 큐가 full인 상태가 아니다
Q.enqueue(G)
dequeue해 무효해진 값을 덮어쓴다
rear가 0번 인덱스를 갖도록 한다
r3 = Q.dequeue()
구현할 때, 마지막 인덱스에 도달하더라도 다음에는 0으로 옮겨질 수 있도록 해야 한다
class CircularQueue:
def __init__(self, n): # 빈 큐 초기화
self.maxCount = n # 최대 큐 길이 설정
self.data = [None] * n
self.count = 0
self.front = -1
self.rear = -1
def size(self):
return self.count
def isEmpty(self):
return self.count == 0
def isFull(self):
return self.count == self.maxCount
def enqueue(self, x):
if self.isFull():
raise IndexError('Queue full')
self.rear = (self.rear+1) % self.maxCount
self.data[self.rear] = x
self.count += 1
def dequeue(self):
if self.isEmpty():
raise IndexError('Queue empty')
self.front = (self.front + 1) % self.maxCount
x = self.data[self.front]
self.count -= 1
return x
def peek(self):
if self.isEmpty():
raise IndexError('Queue empty')
return self.data[(self.front+1)%self.maxCount]