728x90
반응형
개요
큐(Queue)는 먼저 들어간 데이터가 먼저 나오는 선입선출(First-In, First-Out, FIFO) 구조를 가지는 선형 자료구조이다. 데이터는 **뒤(Rear)**에서 삽입되고, **앞(Front)**에서 삭제되며, 일상적인 줄서기, 프로세스 스케줄링, 버퍼 처리 등에 널리 사용된다. 파이썬에서는 collections.deque, 리스트, 큐 모듈 등을 통해 구현할 수 있다.
1. 개념 및 정의
항목 | 설명 |
구조 | 선형적, 한쪽에서는 삽입, 반대쪽에서는 삭제 수행 |
주요 연산 | enqueue(삽입), dequeue(삭제), peek(앞 요소 확인), isEmpty |
원리 | FIFO (First-In, First-Out) |
2. 큐 연산 동작 예시
초기: []
enqueue(10) → [10]
enqueue(20) → [10, 20]
dequeue() → [20] (10 제거)
enqueue(30) → [20, 30]
peek() → 20
3. 파이썬 구현 예시 (deque 기반)
from collections import deque
queue = deque()
queue.append(10) # enqueue
queue.append(20)
print(queue.popleft()) # dequeue → 10
print(queue[0]) # peek → 20
print(not queue) # isEmpty → False
deque는 양쪽에서 삽입/삭제가 가능한 큐 구조로 성능이 우수하다.
4. 시간 및 공간 복잡도
연산 | 시간 복잡도 |
enqueue | O(1) |
dequeue | O(1) |
peek | O(1) |
isEmpty | O(1) |
deque, queue.Queue는 리스트보다 더 효율적인 큐 구현을 제공한다.
5. 큐의 종류
종류 | 설명 |
일반 큐 | 가장 기본적인 FIFO 구조 |
원형 큐 | 큐의 크기를 고정하여 반복적으로 연결 |
우선순위 큐 | 값의 우선순위에 따라 먼저 꺼냄 (heap 기반) |
이중 큐(Deque) | 양쪽에서 삽입/삭제가 가능한 큐 |
6. 큐 vs 스택 비교
항목 | 큐(Queue) | 스택(Stack) |
구조 | 선입선출 (FIFO) | 후입선출 (LIFO) |
삽입 위치 | 뒤쪽(Rear) | 위쪽(Top) |
삭제 위치 | 앞쪽(Front) | 위쪽(Top) |
사용 예시 | 대기열, CPU 스케줄링 | 함수 호출, 수식 계산 |
7. 활용 사례
분야 | 활용 예시 |
운영체제 | 프로세스 관리, CPU 스케줄링 |
네트워크 | 패킷 큐, 버퍼 |
그래프 탐색 | BFS(너비 우선 탐색) |
웹 서버 | 요청 처리 큐 |
데이터 처리 | 이벤트 큐, 대기열 관리 |
8. 큐의 장단점
항목 | 장점 | 단점 |
구조 | 단순, 직관적인 흐름 관리 가능 | 임의 위치 접근 불가 |
효율 | enqueue/dequeue 모두 O(1) | 일반 리스트로 구현 시 비효율 발생 가능 |
유연성 | 다양한 큐 구조 확장 가능 | 복잡한 우선순위 처리에는 부적합 (일반 큐 기준) |
9. 결론
큐는 선입선출이라는 간단한 구조 속에 다양한 활용 가능성을 지닌 자료구조이다. 운영체제, 네트워크, 알고리즘 BFS 등 다양한 분야에서 필수적으로 사용되며, 파이썬에서는 deque, queue.Queue, PriorityQueue 등으로 쉽게 구현 가능하다. 스택과 함께 자료구조 학습의 핵심 개념 중 하나이다.
728x90
반응형
'Topic' 카테고리의 다른 글
트리(Tree) (0) | 2025.03.29 |
---|---|
덱(Deque, Double-Ended Queue) (0) | 2025.03.29 |
스택(Stack) (0) | 2025.03.29 |
Linked List(연결 리스트) (0) | 2025.03.29 |
배열(Array) (1) | 2025.03.29 |