[자료구조] 큐(Queue)

김찬미·2024년 6월 27일
0

큐의 개념

queue는 '줄을 서다' 라는 뜻을 가지고 있다. 큐는 먼저 들어간 데이터가 먼저 나오는 자료구조이다. 맛집에서 줄을 선 순서대로 식당에 입장할 때를 생각하면 된다.

이런 큐의 특징을 선입선출 또는 FIFO(first in first out)이라고 한다. 스택과 마찬가지로 큐도 삽입하는 연산을 푸시, 꺼내는 연산을 팝이라고 한다.

큐의 특성을 활용하는 분야

먼저 들어온 것을 먼저 처리하는 큐의 동작 방식은 프로그래밍 언어에서 많이 활용되고 있다. 대표적으로 여러 이벤트가 발생한 순서대로 처리할 때 큐가 활용된다.

  • 작업 대기열: 네트워크 통신을 할 때 다수의 요청이 서버에 들어오면 서버는 요청이 들어온 순서대로 작업을 처리한다.

  • 이벤트 처리: 어떤 애플리케이션이나 시스템에서 사용자의 이벤트, 예를 들어 키보드 입력이나 마우스 움직임을 처리할 때 큐를 활용할 수 있다.

이와 같은 특성으로 인해 큐는 데이터 처리 순서를 보장하고, 특정 순서로 처리해야 할 필요가 있는 다양한 애플리케이션에서 중요한 역할을 한다.

알겠어요! 아까 보내준 내용을 당신의 게시물에 맞게 추가해보겠습니다:


파이썬에서의 큐(Queue)

파이썬에서 큐(Queue)는 주로 데이터를 넣는 enqueue(인큐)와 데이터를 빼내는 dequeue(디큐) 연산을 지원한다. 큐는 일반적으로 리스트를 이용해 구현할 수 있지만, 파이썬에서는 collections 모듈의 deque 클래스를 사용하여 효율적으로 구현할 수 있다.

여기서 dequedouble-ended queue의 약자로, 큐의 양 끝에서 데이터의 추가와 삭제가 모두 가능한 자료구조이다. deque를 사용하면 큐의 양 끝에서의 연산이 O(1)의 시간복잡도로 수행될 수 있어서 효율적이다.

파이썬에서의 큐 구현 예제 - deque

from collections import deque

# 큐 생성
queue = deque()

# 데이터 enqueue (큐의 맨 뒤에 데이터 추가)
queue.append(1)  # 큐에 1을 추가 -> deque([1])
queue.append(2)  # 큐에 2를 추가 -> deque([1, 2])
queue.append(3)  # 큐에 3을 추가 -> deque([1, 2, 3])

# 큐 상태 출력
print("현재 큐 상태:", queue)  # 현재 큐 상태: deque([1, 2, 3])

# 데이터 dequeue (큐의 맨 앞에서 데이터 삭제 및 반환)
item = queue.popleft()
print("꺼낸 항목:", item)  # 큐에서 꺼낸 항목: 1
print("업데이트된 큐:", queue)  # 업데이트된 큐 상태: deque([2, 3])

위 예제에서 dequecollections 모듈에서 가져온 후, append() 메서드로 데이터를 큐에 추가하고, popleft() 메서드로 데이터를 큐에서 제거하면서 가져올 수 있다.

큐의 주요 연산과 시간복잡도

연산설명시간복잡도
queue = deque()빈 큐 생성O(1)
queue.append(item)큐의 맨 뒤에 데이터(item) 추가O(1)
queue.popleft()큐의 맨 앞에서 데이터 제거 및 반환O(1)
queue.clear()큐의 모든 데이터 제거O(1)
len(queue)큐의 길이(데이터 개수) 반환O(1)
item in queue큐에 특정 데이터(item) 존재 여부 확인O(n)
queue.rotate(n)큐를 n번 회전 (양수일 경우 오른쪽으로, 음수일 경우 왼쪽으로)O(n)

파이썬에서는 queue 모듈도 제공되며, 이 모듈은 스레드 간 안전한 큐 클래스인 Queue를 제공한다. 멀티스레드 환경에서 데이터를 안전하게 공유해야 할 때 유용하게 사용할 수 있다.

profile
백엔드 개발자

0개의 댓글