큐는 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조이다.
줄을 서는 행위와 유사하다고 할 수 있다.
파이썬의 queue 라이브러리는 다양한 큐 구조를 제공한다.
파이썬으로 큐를 구현하는 방법은 대표적으로 두 가지가 있다. list
를 사용하는 방법과 queue 라이브러리
를 사용하는 방법이다.
queue = list()
요소를 추가할 때는 append()
, 삭제할 때는 del
키워드나 pop()
함수를 사용한다.
queue.append(0)
queue.append(1)
queue.append(2)
del queue[0] // 요소 0 제거
queue.pop(0) // 요소 1 제거
print(queue)
2
list를 사용해 뒤에서 요소를 추가하고, 앞에서 요소를 제거함으로써 큐를 구현할 수 있다. 이때 pop() 함수는 마지막 요소를 출력하기 때문에 인자 값으로 0을 넣어야 맨 앞의 요소를 제거할 수 있다.
파이썬의 queue 라이브러리에는 앞에서 언급한대로 Queue()
, LifoQueue()
, PriorityQueue()
가 존재한다.
import queue
queue = queue.Queue()
요소를 추가할 때는 put()
, 제거할 때는 get()
함수를 사용한다. 또한 qsize()
함수를 사용하면 큐의 크기, 요소의 개수를 알 수 있다.
queue.put(0)
queue.put(1)
queue.put(2)
queue.get()
queue.qsize()
2
Queue()는 선입선출(FIFO) 구조이기 때문에, get() 함수를 수행할 경우, 가장 먼저 추가된 요소 0
이 제거된다.
import queue
queue = queue.LifoQueue()
queue.put(0)
queue.put(1)
queue.put(2)
queue.get()
queue.qsize()
2
LifoQueue()는 후입선출(LIFO) 구조이기 때문에, get() 함수를 수행할 경우, 가장 마지막에 추가된 요소 2
가 제거된다.
PriorityQueue()는 우선순위를 부여하여 우선순위가 가장 큰 요소를 먼저 제거하는 구조이다. 때문에 요소 추가 시, 우선순위를 함께 전달한다.
import queue
queue = queue.PriorityQueue()
queue.put((5, 0))
queue.put((10, 1))
queue.put((7, 2))
queue.get()
queue.qsize()
2
get() 함수를 수행했을 때, 우선순위가 10으로 가장 높은 요소인 1
이 제거된다.