Programing/자료구조(Data structure)
[자료구조] Swift로 풀어보는 스택(Stack)
5주년
2020. 6. 16. 00:33
안녕하세요~! 5anniversary입니다.
이번 시간에는 자료구조에서 대표적인 유형 중에 하나인 스택에 대해 천천히 알아보며, Swift로 구현해보는 시간을 가져보겠습니다.
우선 스택에 대한 기본적인 구조를 알아야 스택을 구현할 수 있겠죠??
스택은 후입 선출/LIFO(Last In - First Out)으로 데이터에 접근하는 자료구조입니다.
따라서 일반적으로 TOP이라 부르는 위치에서만 데이터를 입력, 출력, 삭제를 할 수 있는 구조로 구현되어있습니다.
따라서 이런 구조를 가진 Stack protocol을 먼저을 만들어볼게요~
public struct Stack<T> {
private var storage: [T] = []
public init() { }
public init(_ elements: [T]){
storage = elements
}
public mutating func push(_ element: T) {
storage.append(element)
}
@discardableResult
public mutating func pop() -> T? {
return storage.popLast()
}
public func peek() -> T? {
return storage.last
}
// MARK: - 스택이 비어있는지
public var isEmpty: Bool {
return peek() == nil
}
// MARK: - 스택의 원소 갯수
public var count: Int? {
return storage.count
}
}
// MARK: -스택 전체를 읽기 위한 Custom String description
extension Stack: CustomStringConvertible {
public var description: String {
let top = "---top---\n"
let bottom = "\n--------"
let stackElements = storage.map { "\($0)" }.reversed().joined(separator: "\n")
return top + stackElements + bottom
}
}