Programing/자료구조(Data structure)
[자료구조] Swift로 풀어보는 덱(Deque)
5주년
2020. 6. 17. 01:14
안녕하세요~! 5anniversary입니다.
이번 시간에는 자료구조에서 대표적인 유형 중에 하나인 덱에 대해 천천히 알아보며, Swift로 구현해보는 시간을 가져보겠습니다.
우선 덱에 대한 기본적인 구조를 알아보겠습니다.
덱에서는 앞에서 다루었던 스택. 큐와 다르게 양쪽 끝에서 모두 삽입과 삭제가 가능한 자료구조입니다.
우선 간단하게 덱의 구조를 파악했으니 Swift로 간단하게 코드를 작성해 볼까요??
public struct Deque<T> {
private var storage: [T] = []
public init() {}
public init(_ elements: [T]){
storage = elements
}
public mutating func frontEnqueue(_ element: T) -> Bool{
storage.insert(element, at: 0)
return true
}
public mutating func backEnqueue(_ element: T) -> Bool{
storage.append(element)
return true
}
public mutating func frontDequeue() -> T? {
return isEmpty ? nil : storage.removeFirst()
}
public mutating func backDequeue() -> T? {
return isEmpty ? nil : storage.remove(at: storage.count - 1)
}
public var isEmpty: Bool {
return storage.isEmpty
}
public var frontPeek: T? {
return storage.first
}
public var backPeek: T? {
return storage.last
}
}
와 같이 구현할 수가 있습니다.
그리고 Stack, Queue와 같이
extension Deque: CustomStringConvertible {
public var description: String {
return storage.description
}
}
private로 선언된 storage를 그려줄수있는 desription을 작성해주었습니다.