본문 바로가기

Swift/자료구조

Swift 덱(Deque) 구현

덱 (Deque)

- 양방향으로 데이터를 삽입및 삭제가 가능 한 데이터 구조이다.

- 양쪽으로 push,pop이 가능하며 시간복잡도는 O(1)이다.

- push,pop을 자주 사용하는 알고리즘에서 효율이 좋다.

- Swift는 지원하지않고, 직접 구현해야하며, 두개의 배열로 구현한다.

 

 

import Foundation

// Deque
struct Deque<T> {
    var enqueue: [T]
    var dequeue: [T] = []

    init(enqueue: [T]) {
        self.enqueue = enqueue
    }
    var count: Int {
        return enqueue.count + dequeue.count
    }
    var isEmpty: Bool {
        return enqueue.isEmpty && dequeue.isEmpty
    }

    mutating func first() -> T? {
        if dequeue.isEmpty {
            dequeue = enqueue.reversed()
            enqueue.removeAll()
        }
        return dequeue.last
    }
    mutating func pushFront(_ element: T) {
        dequeue.append(element)
    }
    mutating func pushRear(_ element: T) {
        enqueue.append(element)
    }
    mutating func popFront() -> T? {
        if dequeue.isEmpty {
            dequeue = enqueue.reversed()
            enqueue.removeAll()
        }
        return dequeue.popLast()
    }
    mutating func popRear() -> T? {
        if enqueue.isEmpty {
            enqueue = dequeue.reversed()
            dequeue.removeAll()
        }
        return enqueue.popLast()
    }
}

'Swift > 자료구조' 카테고리의 다른 글

세그먼트 트리 Swift  (0) 2024.04.29
분리집합과 Union-Find Swift  (1) 2024.04.28
Swift 큐(Queue) 구현  (0) 2024.04.03
Swift 우선순위 큐(Priority Queue) 구현  (0) 2023.05.17
Swift 힙(Heap) 구현  (0) 2023.05.17