longlivedrgn
Miro 찾기
longlivedrgn
전체 방문자
오늘
어제
  • 분류 전체보기 (74)
    • Swift (36)
    • iOS (31)
    • Algorithm (0)
    • Architecture, Design Patter.. (1)
    • Computer Science (6)
      • 컴퓨터 네트워크 (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
longlivedrgn

Miro 찾기

[iOS] Queue 구현하기
iOS

[iOS] Queue 구현하기

2023. 2. 4. 00:15

💥 Queue 구현하기

  • Queue를 구현할 경우, 필수적으로 구현해야될 메소드가 몇가지 있다.
    • enqueue
    • dequeue
    • count
    • isEmpty
    • …
  • 일반 array로 구현하는 것보다 double stack으로 구현할 경우 dequeue시, 시간 복잡도면에서 이득을 볼 수 가 있다.

☀️ Array를 통한 Queue 구현

  • 일반 array로 queue를 구현해보면 아래와 같이 구현할 수 있다.
struct QueueArray<T>: Queue {
  private var array: [T] = []
  var isEmpty: Bool {
    return array.isEmpty
  }
  var peek: T? {
    return array.first
  }

  mutating func enqueue(_ element: T) {
    array.append(element)
  }

  @discardableResult
  mutating func dequeue() -> T? {
    return isEmpty ? nil : array.removeFirst()
  }
}

☀️ Double stack을 통하여 queue를 구현

  • Double stack을 통하여 queue를 구현해주면 아래와 같이 구현해 줄 수 있다.
  • 해당 방법은 일반 array일 때보다, dequeue시에 큰 이득을 얻을 수 있다.
    • 일반 array - dequeue ⇒ removeFirst() ⇒ O(n)
    • Double stack - dequeue ⇒ O(1)
struct QueueStack<T>: Queue {
  private var dequeueStack: [T] = []
  private var enqueueStack: [T] = []

  var isEmpty: Bool {
    return dequeueStack.isEmpty && enqueueStack.isEmpty
  }
  var peek: T? {
    return !dequeueStack.isEmpty ? dequeueStack.last : enqueueStack.first
  }

  mutating func enqueue(_ element: T) {
    enqueueStack.append(element)
  }

  @discardableResult
  mutating func dequeue() -> T? {
    if dequeueStack.isEmpty {
      dequeueStack = enqueueStack.reversed()
      enqueueStack.removeAll()
    }
    return dequeueStack.popLast()
  }
}
  • 나머지 연산은 동일한 시간 복잡도(O(1))을 갖지만, dequeue시에는 Double stack으로 queue를 구현하는 것이 시간복잡도면에서 더 유리하다.

📚 참고자료

Swift로 구현한 Queue 와 더블스택

저작자표시 (새창열림)

'iOS' 카테고리의 다른 글

[iOS] 의존성 주입  (0) 2023.02.04
[iOS] Delegate Pattern  (0) 2023.02.04
[iOS] Priority(Autolayout)  (0) 2023.02.03
[iOS] prepareForReuse()  (0) 2023.02.03
[iOS] TableView의 reloadData()란?  (0) 2023.02.03
    'iOS' 카테고리의 다른 글
    • [iOS] 의존성 주입
    • [iOS] Delegate Pattern
    • [iOS] Priority(Autolayout)
    • [iOS] prepareForReuse()
    longlivedrgn
    longlivedrgn

    티스토리툴바