Post

큐(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.