What-is-queue.md
κ°λ
λ¨Όμ μ§μ΄ λ£μ λ°μ΄ν°κ° λ¨Όμ λμ€λ FIFO(First In First Out)κ΅¬μ‘°λ‘ μ μ₯νλ λ°©μ
μ©μ΄
Front : 첫 λ²μ§Έ λ°μ΄ν°
Rear : κ°μ₯ λ§μ§λ§ λ°μ΄ν°
front, rearμ μ΄κΉκ° : -1
μ°μ°
FIFO - First In First Out
Enqueue : λ°μ΄ν°λ₯Ό μ½μ νλ λμ
add(item) itemμ 리μ€νΈμ λλΆλΆμ μΆκ°
rear = rear + 1 ν item μΆκ°
Dequeue : λ°μ΄ν°λ₯Ό μμ νλ λμ
remove : 리μ€νΈμ 첫 λ²μ§Έ νλͺ©μ μ κ±°
front = front + 1
peek : νμμ κ°μ₯ μμ μλ νλͺ©μ λ°ν
isEmpty : νκ° λΉμ΄μμ λ trueλ₯Ό λ°ν
(front == rear) ? True : False
isFull : rear = n - 1
μ’
λ₯
μ ν

1μ°¨μ λ°°μ΄μ ννλ‘ μ΄λ£¨μ΄μ Έμμ΅λλ€.
νν
μ ν νμ λ¬Έμ μ
frontμ rearμ κ°μ΄ κ³μ μ¦κ°νκΈ° λλ¬Έμ μΈμ κ°λ λ°°μ΄μ λμ λλ¬νκ² λκ³ λ°°μ΄μ μλΆλΆμ΄ λΉμ΄μλλΌλ μ¬μ©νμ§ λͺ»ν©λλ€.
λ°λΌμ μ(ν)ν νκ° λμ€κ² λμμ΅λλ€.

front μμ λ¨μ 곡κ°μ μ¬μ©νμ§ λͺ»νλ μ ννμ λ¬Έμ μ μ ν΄κ²°νκΈ° μν΄ κ³ μλ μννλ λ°°μ΄μ μμκ³Ό λμ΄ μ΄μ΄μ Έ μλ κ²μ²λΌ μ¬μ©νκΈ° μν΄ (rear+1)%arraysizeμ νμμΌλ‘ ν¬μΈν°λ₯Ό μ¦κ°μν΅λλ€.
ꡬν
μ νν
class LinearQueue:
def __init__(self):
self.front = -1
self.rear = -1
def create_queue(self, size):
self.queue = list([0 for i in range(size)]) #pythonμ listλ nullκ°μ΄ λ€μ΄κ° μ μκΈ° λλ¬Έμ 0μ΄ λΉ κ°μ΄λΌκ³ μκ°νμ
def add(self, item):
self.rear += 1
self.queue[self.rear] = item
def remove(self):
self.front += 1
self.queue[self.front] = 0
def peek(self):
return self.queue[self.rear]
def isEmpty(self):
if self.front == self.rear:
return True
return False
def isFull(self):
if self.rear == len(self.queue) - 1:
return True
return False
μν ν
class CircularQueue:
def __init__(self):
self.front = -1
self.rear = -1
def create_queue(self, size):
# pythonμ listλ nullκ°μ΄ λ€μ΄κ° μ μκΈ° λλ¬Έμ 0μ΄ λΉ κ°μ΄λΌκ³ μκ°νμ
self.queue = list([0 for i in range(size)])
print(len(self.queue))
def add(self, item):
if self.isFull:
print('λ°°μ΄μ΄ κ½μ°Όμ΅λλ€.')
else:
self.rear += 1
if self.rear >= len(self.queue):
self.rear %= len(self.queue)
self.queue[self.rear] = item
print(self.queue)
print('front: {} rear: {}'.format(self.front, self.rear))
def remove(self):
if self.isEmpty:
print('λ°°μ΄μ΄ λΉμμ΅λλ€.')
else:
self.front += 1
if self.front >= len(self.front):
self.front %= len(self.queue)
self.queue[self.front] = 0
print(self.queue)
print('front: {} rear: {}'.format(self.front, self.rear))
def peek(self):
return self.queue[self.rear]
def isEmpty(self):
if self.front == self.rear:
return True
return False
def isFull(self):
if self.rear == len(self.queue) - 1:
return True
return False
μ€μ μ½λ©ν μ€νΈμμλ collections λͺ¨λμ dequeλ₯Ό μ¬μ©νμ!
from collections import deque
queue = deque()
# 리μ€νΈμ appendμ κ°μ λμ
queue.append()
# κ°μ₯ μΌμͺ½μ μλ μμ pop
queue.popleft()
print(queue) #λ¨Όμ λ€μ΄μ¨ μμλλ‘ μΆλ ₯
print(queue.reverse()) #λμ€μ λ€μ΄μ¨ μμλΆν° μΆλ ₯
Last updated