FIFO : First in, First out
가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조
ex) 가장 먼저 줄 선 사람이 가장 먼저 입장
스택(LILO)와 반대
Enqueue : 큐에 데이터를 넣기
Dequeue : 큐에서 데이터 꺼내기
# 리스트로 큐의 enqueue, dequeue 구현
queue_list = list()
def enqueue(data):
queue_list.append(data)
def dequeue():
data = queue_list[0]
del queue_list[0]
return data
for i in range(10):
enqueue(i)
dequeue()
파이썬에서는 큐 자료구조로 Queue(), LifoQueue(), PriorityQueue()를 제공한다.
Queue() : 일반적인 큐
LifoQueue() : Last in, First out (=stack)
PriorityQueue() : 데이터마다 우선순위를 넣어, 해당 기준에서 높은 순으로 데이터를 출력한다.
Queue()
# Queue()로 큐 만들기
import queue
queue1 = queue.Queue()
# 큐에 데이터 넣기
queue1.put("ruffy")
queue1.put(1)
# 큐의 사이즈 확인
queue1.qsize() # 출력 : 2
# 큐의 데이터 가져오기 (0번 인덱스 가져오고 지워짐)
queue1.get() # 출력 : ruffy
# LifoQueue()
import queue
queue2 = queue.LifoQueue()
# Lifo 큐에 데이터 넣기
queue2.put("Robin")
queue2.put(52)
# Lifo 큐의 사이즈 확인
queue2.qsize() # 출력 : 2
# Lifo 큐의 데이터 가져오기 (마지막 인덱스 가져오고 지워짐)
queue2.get() # 출력 : 52
import queue
queue3 = queue.PriorityQueue()
# Priortiy 큐에 데이터 넣기 : (우선순위, 데이터), 튜플 형식
# 우선순위가 높을 수록 숫자가 작음
queue3.put((1, "strawberry"))
queue3.put((10, "banana"))
queue3.put((5, "peach"))
# Priortiy 큐의 사이즈 확인
queue3.qsize() # 출력 : 3
# Priortiy 큐에 데이터 넣기
queue3.get() # 출력 : (1, 'strawberry')
📌 자료 구조 연습
https://visualgo.net/en/list