코딩테스트/자료구조 이론
[자료구조 이론] 큐(Queue)
쳉지
2021. 4. 14. 04:35
- 줄을 서는 행위와 유사
- 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조
- 예)음식점에서 가장 먼저 줄을 선 사람이 제일 먼저 음식점에 입장
- FIFO(First-In, First-Out) 또는 LILO(Last-In, Last-Out) 방식으로 스택과 꺼내는 순서가 반대
(참고)
- 멀티 태스킹을 위한 프로세스 스케쥴링 방식을 구현하기 위해 많이 사용됨
- Enqueue: 큐에 데이터를 넣는 기능
- Dequeue: 큐에서 데이터를 꺼내는 기능
# Queue()로 큐 만들기
import queue
# FIFO Queue (일반적인 큐)
data_queue = queue.Queue()
data_queue.put('hello') # enqueue
data_queue.put(2)
data_queue.qsize() # size of queue => 2
data_queue.get() # dequeue => 'hello'
# LIFO Queue
data_queue_2 = queue.LifoQueue()
data_queue_2.put('world') # enqueue
data_queue_2.put(1)
data_queue_2.qsize() # size of queue => 2
data_queue_2.get() # dequeue => 1
# Priority Queue
### 우선순위가 높은 것 먼저 추출
### 데이터가 튜플 형태로 들어감: (priority, data)
### 우선순위가 높을수록 숫자가 낮다.
data_queue_3 = queue.PriorityQueue()
data_queue_3.put((10, "hello"))
data_queue_3.put((5, 1))
data_queue_3.put((15, "world"))
data_queue_3.qsize() # 3
data_queue_3.get() # (5, 1)
data_queue_3.get() # (10, "hello")
# 리스트 변수로 큐 만들기
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)
len(queue_list) # 10
queue_list # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
dequeue() # 0