큐(Queue)
큐(Queue)
1. 큐 개념
큐는 데이터를 한 쪽 끝에서는 넣고, 반대쪽 끝에서는 꺼내는 선입선출(FIFO, First In First Out) 방식의 자료구조입니다. 즉, 먼저 넣은 데이터가 먼저 나옵니다.
2. 기본 연산
- enqueue(item): 큐의 뒤쪽(리어)에 데이터(item)를 추가합니다.
- dequeue(): 큐의 앞쪽(프론트)에서 데이터를 제거하고 반환합니다. 큐가 비어 있으면 오류가 발생할 수 있습니다.
- peek() / front(): 큐의 앞쪽 데이터를 제거하지 않고 반환합니다.
- isEmpty(): 큐가 비어 있는지 확인합니다.
3. 내부 구조
큐는 배열이나 연결 리스트로 구현할 수 있습니다.
- 배열 기반 큐는 인덱스 관리를 통해 효율적으로 구현하지만, 단순 배열에서 앞쪽 요소 제거 시 비용이 발생할 수 있어 원형 큐(Circular Queue)로 개선하기도 합니다.
- 연결 리스트 기반 큐는 앞뒤 노드 포인터를 유지해 동적 크기 조절과 효율적인 삽입/삭제가 가능합니다.
4. 활용 사례
- 작업 스케줄링: 프로세스나 작업을 순서대로 처리할 때 사용합니다.
- 메시지 큐: 비동기 통신에서 메시지를 순서대로 처리합니다.
- 너비 우선 탐색(BFS): 그래프나 트리 탐색 시 방문 노드를 관리합니다.
- 프린터 작업 관리: 출력 요청을 차례대로 처리합니다.
5. 코드 예시 (Swift)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct Queue<T> {
private var elements = [T]()
mutating func enqueue(_ item: T) {
elements.append(item)
}
mutating func dequeue() -> T? {
guard !elements.isEmpty else { return nil }
return elements.removeFirst()
}
func peek() -> T? {
return elements.first
}
var isEmpty: Bool {
return elements.isEmpty
}
}
6. 마무리
큐는 데이터를 순서대로 처리해야 하는 문제에서 필수적인 자료구조입니다. FIFO 특성을 이해하고 활용하면 작업 흐름 제어와 자원 관리에 효과적입니다.
This post is licensed under CC BY 4.0 by the author.