Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- MainScheduler
- leetcode
- MethodSwilzzling
- 프로그래머스
- DispatchQueue
- MainScheduler.asyncInstance
- data_structure
- CoreBluetooth
- SRP
- 코테
- gitflow
- Realm
- DependencyInjection
- rxswift
- GIT
- 등굣길
- 청년취업사관학교
- GCD
- combine
- cleanarchitecture
- 명품cppProgramming c++
- DynamicMemberLookup
- MainScheduler.Instance
- RaceCondition
- SwiftUI
- swift
- 오픈채팅방
- DiffableDataSource
- SeSAC
- IOS
Archives
- Today
- Total
Do.
Ring Buffer를 이용한 Queue 자료구조 구현, Swift 본문
Queue를 구현하는 방법은 일반적으로 4가지가 있다.
1. 배열을 이용하는 방법
2. 이중 연결 목록을 이용하는 방법
3. 링 버퍼를 이용하는 방법
4. 이중 스택을 이용하는 방법
이 중에서 배열을 이용하는 방법의 경우 데이터 삽입의 경우는 O(1)이나 데이터를 출력할 때는 앞에서 부터 데이터가 제거되므로 배열이 공간을 재 배열하는 만큼의 비용이 발생한다. Swift에서는 그 동작이 O(n)이다.
또 이중 연결 목록을 이용하는 방법은 노드 하나당 가지는 데이터가 value, next, previous 3개의 속성을 가지고 있기도 하고 아무래도 직관적이지도 않다. 데이터의 삽입, 출력에서 이론상 성능은 O(1)이지만 높은 오버헤드를 가지고 있다.
따라서 4가지 방법 중 가장 좋은 성능을 가지고 있고 구현이 쉬운 방법은 링 버퍼를 이용하는 법이다.
Swift 에서 링 버퍼를 구현하는 방법은 아래 링크를 참고
https://github.com/raywenderlich/swift-algorithm-club/tree/master/Ring%20Buffer
이미지 썸네일 삭제
swift-algorithm-club/Ring Buffer at master · raywenderlich/swift-algorithm-club
Algorithms and data structures in Swift, with explanations! - swift-algorithm-club/Ring Buffer at master · raywenderlich/swift-algorithm-club
github.com
public struct QueueRingBuffer<T> {
private var ringBuffer: RingBuffer<T>
public init(count: Int) {
ringBuffer = RingBuffer<T>(count: count)
}
public var isEmpty: Bool {
ringBuffer.isEmpty
}
public var peek: T? {
ringBuffer.first
}
public mutating func enqueue(_ element: T) -> Bool {
ringBuffer.write(element)
}
public mutating func dequeue() -> T? {
ringBuffer.read()
}
}
extension QueueRingBuffer: CustomStringConvertible {
public var description: String {
String(describing: ringBuffer)
}
}
'Algorithm' 카테고리의 다른 글
2019 KAKAO BLIND RECRUITMENT - 오픈 채팅방, Swift (0) | 2022.03.13 |
---|---|
2020 KAKAO BLIND RECRUITMET - 문자열 압축, Swift (0) | 2022.03.12 |
최대공약수와 최소공배수 (0) | 2022.02.09 |
Swift - Stack 구현하기 (0) | 2022.02.09 |
LeetCode - Binary Tree Level Order Traversal (0) | 2022.02.09 |
Comments