[자료구조] 큐(Queue)와 덱(Dequeue) 이해하기

Hoojeong Kim·2021년 9월 7일
0

Data Structure

목록 보기
1/3
post-thumbnail

큐(Queue)

큐는 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조이다.
줄을 서는 행위와 유사하다고 할 수 있다.

  • FIFO(First-In, First-Out) 또는 LILO(Last-In, Last-Out) 방식을 갖는다.
  • LIFO 또는 FILO 방식을 갖는 스택과 반대이다.


파이썬의 queue 라이브러리는 다양한 큐 구조를 제공한다.

  • Queue() : 앞에서 설명한, 가장 일반적인 큐 자료 구조
  • LifoQueue() : 나중에 입력된 데이터가 먼저 출력되는 구조 (스택과 동일)
  • PriorityQueue() : 데이터마다 우선순위를 넣어, 우선순위가 높은 순으로 출력

큐 사용하기

파이썬으로 큐를 구현하는 방법은 대표적으로 두 가지가 있다. list를 사용하는 방법과 queue 라이브러리를 사용하는 방법이다.

list

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 라이브러리에는 앞에서 언급한대로 Queue(), LifoQueue(), PriorityQueue()가 존재한다.

Queue()

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이 제거된다.

LifoQueue()

import queue

queue = queue.LifoQueue()

queue.put(0)
queue.put(1)
queue.put(2)

queue.get()

queue.qsize()
2

LifoQueue()는 후입선출(LIFO) 구조이기 때문에, get() 함수를 수행할 경우, 가장 마지막에 추가된 요소 2가 제거된다.

PriorityQueue()

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이 제거된다.

profile
나 애기 개발자 👶🏻

0개의 댓글