반응형
큐(Queue)는 선입선출(FIFO: First In, First Out)의 원칙을 따르는 자료구조다.
가장 먼저 들어온 데이터가 가장 먼저 나가며, 주로 대기열이나 리소스 관리 등에서 사용된다.
큐의 주요 특징
- 선입선출(FIFO): 가장 먼저 들어온 요소가 가장 먼저 나감.
- 동적 크기: 필요에 따라 요소를 추가하거나 삭제할 수 있음.
- 제한적인 접근: 큐는 맨 앞과 맨 뒤에서만 요소를 추가하거나 제거할 수 있음.
주요 연산:
- enqueue: 큐의 끝에 요소를 추가.
- dequeue: 큐의 앞에서 요소를 제거하고 반환.
- peek: 큐의 맨 앞에 있는 요소를 제거하지 않고 확인.
- isEmpty: 큐가 비어있는지 확인.
시간 복잡도
- enqueue: O(1) – 큐의 끝에 요소를 추가.
- dequeue: O(1) – 큐의 앞에서 요소를 제거.
- peek: O(1) – 큐의 맨 앞 요소를 확인.
- isEmpty: O(1) – 큐가 비어있는지 확인.
큐 구현 예시 (Swift)
import Foundation
struct Queue<T> {
private var array = T {
didSet {
print("현재 데이터는 ::(array)")
}
}
// 요소를 큐의 끝에 추가
mutating func enqueue(_ element: T) {
array.append(element)
}
// 큐의 맨 앞 요소를 제거하고 반환
mutating func dequeue() -> T? {
return array.isEmpty ? nil : array.removeFirst()
}
// 큐의 맨 앞 요소를 확인 (제거하지 않음)
func peek() -> T? {
return array.isEmpty ? nil : array[0]
}
// 큐가 비어 있는지 확인
func isEmpty() -> Bool {
return array.isEmpty
}
}
// 큐 사용 예시
var queue = Queue<String>()
queue.enqueue("딸기")
//현재 데이터는 ::["딸기"]
queue.enqueue("사과")
//현재 데이터는 ::["딸기, 사과"]
let peekItem = queue.peek()
print("peek된 Item은 (peekItem)")
// peek된 Item은 Optional("딸기")
let dequeueItem = queue.dequeue()
// 현재 데이터는 ::["사과"]
print("dequeue된 Item은 (dequeueItem)")
// dequeue된 Item은 Optional("딸기")
let dequeueItem2 = queue.dequeue()
// 현재 데이터는 ::[]
print("dequeue된 Item은 (dequeueItem2)")
// dequeue된 Item은 Optional("사과")
let dequeueItem3 = queue.dequeue()
print("dequeue된 Item은 (dequeueItem3)")
// dequeue된 Item은 nil
반응형
'모바일앱 > 알고리즘' 카테고리의 다른 글
기본적인 자료구조(3) - 스택(Stack) (0) | 2024.10.01 |
---|---|
기본적인 자료구조(2) - 연결 리스트(Linked List) (0) | 2024.10.01 |
기본적인 자료구조(1) - 배열(Array) (0) | 2024.09.29 |
백준 (단계별로 풀어보기) 입출력과 사칙연산(1) (0) | 2021.09.30 |