Swift에서의 Stack
제네릭으로 뼈대를 만들어준다.
struct Stack<T> {
var elements: [T] = []
var count: Int {
return elements.count
}
var isEmpty: Bool {
return elements.isEmpty
}
}
Swift
복사
•
제네릭으로 데이터를 담을 수 있는 배열 하나를 만들어준다.
•
스택에 담긴 데이터의 개수와 스택이 비어있는지 여부는 스위프트에서 제공하는 count 연산 프로퍼티와 isEmpty 연산 프로퍼티를 그대로 사용
삽입(push) - O(1)
mutating func push(_ element: T) {
elements.append(element)
}
Swift
복사
여기서 mutating 키워드는 특정 struct, enum 또는 튜플 등의 값 타입의 메서드 내에서 해당 인스턴스의 속성을 변경할 때 사용된다.
Swift에서는 값 타입의 인스턴스가 기본적으로 불변(immutable)이기 때문에, 이를 변경하는 메서드에는 mutating 키워드를 명시적으로 붙여야 한다.
여기서, push, pop 메서드는 해당 인스턴스의 상태를 변경하는 것으로 간주되어 mutating 키워드가 필요하다.
peek(top) - O(1)
func top() -> T? {
return elements.last
}
Swift
복사
배열의 last 프로퍼티를 통해 마지막 요소를 반환해준다.
삭제(pop) - O(1)
mutating func pop() -> T? {
return elements.popLast()
}
Swift
복사
→ 여기서 removeLast는 배열이 비어있을 때 사용하면 에러를 발생시킨다.
→ popLast를 사용하면 배열이 비어있을 때는 nil을 반환한다.