큐
선입선출의 형식인 데이터구조 (FIFO)
- Enqueue: 큐 맨 뒤에 요소 추가
- Dequeue: 큐 맨 앞의 데이터를 반환
- Peek: Front에 위치한 데이터 값 반환
- Front: 큐의 앞부분 (가장 먼저 들어온 데이터가 위치함)
- Rear: 큐의 뒷부분 ( 가장 최근에 들어온 데이터가 위치함)
dequeue하는 과정에서 removeFirst() 메소드를 이용한다면 시간복잡도가 O(n)이 걸리게된다.
이를 해결하기위해 index를 이용해 front부분을 확인하여 데이터를 반환하는 방법도 있지만,
reversed()도 O(1)이 걸리므로 이 방법을 사용했다.
import Foundation
struct Queue<T> {
var elements: [T] = []
// 큐 갯수
var count: Int {
return elements.count
}
// 큐의 가장 먼저 나갈 데이터
var peek: T? {
if elements.isEmpty {
return nil
} else {
return elements[0]
}
}
// 큐의 앞부분
var front: T? {
if elements.isEmpty {
return nil
} else {
return elements[0]
}
}
// 큐의 뒷부분
var rear: T? {
if elements.isEmpty {
return nil
} else {
return elements.last!
}
}
// 큐 비어있는지
var isEmpty: Bool {
return elements.isEmpty
}
// 큐 데이터 삽입
mutating func enqueue(element: T) {
elements.append(element)
}
// 큐 데이터 삭제(반환)
mutating func dequeue() -> T? {
if elements.isEmpty {
return nil
} else {
var arr = Array(elements.reversed())
let returnValue = arr.popLast()
elements = Array(arr.reversed())
return returnValue
}
}
}
'Swift > 자료구조' 카테고리의 다른 글
분리집합과 Union-Find Swift (1) | 2024.04.28 |
---|---|
Swift 덱(Deque) 구현 (0) | 2024.04.03 |
Swift 우선순위 큐(Priority Queue) 구현 (0) | 2023.05.17 |
Swift 힙(Heap) 구현 (0) | 2023.05.17 |
Swift 스택(Stack) 구현 (0) | 2023.04.17 |