원형큐, 환형큐, 링버퍼 등으로 불리고, 일반적인 Queue와 마찬가지로 FIFO 구조를 지니는데 정해진 개수의 저장공간을 만들고 front(head)와 rear(tail)의 위치를 원형으로 옮겨가며 사용하기 때문에 불필요한 데이터의 이동이 발생하지 않고 큐가 가득찬다면 더이상 enqueue할 수 없다.
__init__(self, capacity)
Enqueue(self, item) - 삽입
Dequeue(self) - 삭제
front(self)
rear(eslf)
isEmpty(self)
isFull(self)
class MyCircularQueue:
def __init__(self, k: int):
self.capacity = k
self.queue = [None] * self.capacity
self.tail = -1
self.head = 0
self.size = 0
def enQueue(self, value: int) -> bool:
if self.size == self.capacity:
print("Error: Queue is Full")
return False
else:
self.tail = (self.tail + 1) % self.capacity
self.queue[self.tail] = value
self.size += 1
return True
def deQueue(self) -> bool:
if self.size == 0:
print("Error: Queue is Empty")
return False
else:
# deq = self.queue[self.head]
self.queue[self.head] = None
self.head = (self.head + 1) % self.capacity
self.size -= 1
return True # deq
def front(self) -> int:
if self.queue[self.head] == None:
return -1
else:
findHead = self.queue[self.head]
return findHead
def rear(self) -> int:
if self.queue[self.tail] == None:
return -1
else:
findTail = self.queue[self.tail]
return findTail
def isEmpty(self) -> bool:
empty = False
if self.size == 0:
empty = True
return empty
def isFull(self) -> bool:
full = False
if self.size == self.capacity:
full = True
return full
ringBuffer = MyCircularQueue(5)
https://towardsdatascience.com/circular-queue-or-ring-buffer-92c7b0193326