큐(Queue)

수정이·2022년 4월 7일
0

Data Structure

목록 보기
2/9
post-thumbnail

큐 구조


  • 먼저 집어 넣은 데이터가 먼저 나오는 FIFO(First In First Out)구조로 저장하는 형식이다.
    • 먼저 줄을 선 사람이 먼저 나가는 상황을 연상하면 된다.
    • 스택(Stack)과 반대되는 개념이다.(LIFO)

큐 용어


  • enqueue : Queue에 데이터를 넣는다.
  • dequeue : Queue에서 데이터를 뺀다.

큐 활용예시


  • 큐는 주로 데이터가 입력된 시간 순서대로 처리되야 하는 상황에 활용한다.
    • 우선순위가 있는 작업 예약
    • 멀티 태스킹을 위한 프로세스 스케쥴링 방식 구현
    • 너비 우선 탐색 구현
    • 캐시 구현

라이브러리


Python

  1. queue 모듈 사용
  • Queue() (일반적인 큐, FIFO)
from queue import Queue

data_queue = Queue()

data_queue.put("good") # 데이터 삽입(Enqueue)
data_queue.put("morning") # 데이터 삽입(Enqueue)

print(data_queue.qsize()) # 큐 사이즈 확인 / 출력 : 2
print(data_queue.get()) # 데이터 받기(Dequeue) / 출력 : good
  • LifoQueue() (LIFO)
from queue import LifoQueue

data_queue = LifoQueue()

data_queue.put("good")
data_queue.put("morning")

print(data_queue.qsize()) # 출력 : 2
print(data_queue.get()) # 출력 : morning
  • PriorityQueue() (우선순위큐)
from queue import PriorityQueue

data_queue = PriorityQueue()

data_queue.put((3, "kim")) # 우선순위도 정해줘야하기 때문에 튜플 형태로 입력한다.
data_queue.put((1, "lee"))

print(data_queue.qsize()) # 출력 : 2
print(data_queue.get()) # 출력 : (1, "lee")
  1. 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) # 출력 : deque([13, 12, 11, 1, 2, 3])

data_queue.pop() # 큐 오른쪽에 데이터를 반환하면서 삭제한다.
print(data_queue) # 출력 : deque([13, 12, 11, 1, 2])
data_queue.popleft() #큐 왼쪽에 데이터를 반환하면서 삭제한다.
print(data_queue) # 출력 : deque([12, 11, 1, 2])

Java

  • Queue 클래스를 제공한다. 큐 클래스에 데이터를 생성하기 위해서는 LinkedList 클래스를 사용해야 한다.
    • Queue<Integer> data_queue = new LinkedList<Integer>();
    • enqueue : add(), offer()
    • dequeue : poll(), remove()

0개의 댓글

관련 채용 정보