
큐 구조
- 먼저 집어 넣은 데이터가 먼저 나오는 FIFO(First In First Out)구조로 저장하는 형식이다.
- 먼저 줄을 선 사람이 먼저 나가는 상황을 연상하면 된다.
- 스택(Stack)과 반대되는 개념이다.(LIFO)
큐 용어
enqueue
: Queue에 데이터를 넣는다.
dequeue
: Queue에서 데이터를 뺀다.
큐 활용예시
- 큐는 주로 데이터가 입력된 시간 순서대로 처리되야 하는 상황에 활용한다.
- 우선순위가 있는 작업 예약
- 멀티 태스킹을 위한 프로세스 스케쥴링 방식 구현
- 너비 우선 탐색 구현
- 캐시 구현
라이브러리
Python
- queue 모듈 사용
from queue import Queue
data_queue = Queue()
data_queue.put("good")
data_queue.put("morning")
print(data_queue.qsize())
print(data_queue.get())
from queue import LifoQueue
data_queue = LifoQueue()
data_queue.put("good")
data_queue.put("morning")
print(data_queue.qsize())
print(data_queue.get())
from queue import PriorityQueue
data_queue = PriorityQueue()
data_queue.put((3, "kim"))
data_queue.put((1, "lee"))
print(data_queue.qsize())
print(data_queue.get())
- collections 모듈의 deque 사용
deque
: double-ended queue의 약자로 양방향에서 추가, 삭제를 할 수 있다.
from collections import deque
data_queue = deque()
for i in range(1, 4):
data_queue.append(i)
data_queue.appendleft(i + 10)
print(data_queue)
data_queue.pop()
print(data_queue)
data_queue.popleft()
print(data_queue)
Java
Queue
클래스를 제공한다. 큐 클래스에 데이터를 생성하기 위해서는 LinkedList
클래스를 사용해야 한다.
Queue<Integer> data_queue = new LinkedList<Integer>();
- enqueue :
add()
, offer()
- dequeue :
poll()
, remove()