Stack의 개념
나중에 입력된 것이 먼저 출력되는 데이터 구조 -> LIFO(Last In First Out)
Swift에서의 Stack 관련 메소드 & 프로퍼티
- push() : stack에 데이터 삽입
- pop() : 가장 마지막 데이터 삭제 및 반환
- peek() : 가장 마지막 요소 반환
- count : 스택의 크기 ( 저장된 데이터의 갯수 )
- isEmpty() : 스택이 비어있는 지 확인
- isFull() : 스택이 꽉 차 있는 지 확인
구조체로 Stack 구현
public struct Stack<T> {
private var elements = Array<T>()
public init() {}
// 스택의 마지막 데이터 삭제후 반환
public mutating func pop() -> T? {
return self.elements.popLast()
}
// 스택에 데이터 삽입
public mutating func push(element: T) {
self.elements.append(element)
}
// 스택의 마지막 데이터 반환 ( 삭제 X )
public func peek() -> T? {
return self.elements.last
}
// 스택이 비어있다면 true 반환
public var isEmpty: Bool {
return self.elements.isEmpty
}
// 스택에 저장된 데이터 갯수 반환
public var count: Int {
return self.elements.count
}
}
* 제네릭
- <T> 를 사용함으로써, 타입을 지정하지 않고 호출되는 순간의 타입을 사용하도록 한다!
스택 사용
public struct Stack<T> {
private var elements = [T]()
public init() {}
public mutating func pop() -> T? {
return self.elements.popLast()
}
public mutating func push(_ element: T) {
self.elements.append(element)
}
public func peak() -> T? {
return self.elements.last
}
public var isEmpty: Bool {
return self.elements.isEmpty
}
public var count: Int {
return self.elements.count
}
}
var stackEx = Stack<Int>()
stackEx.push(1) // [1]
stackEx.push(2) // [1, 2]
stackEx.push(3) // [1, 2, 3]
var x = stackEx.pop() // x = 3
x = stackEx.pop() // x = 2
x = stackEx.pop() // x = 1
x = stackEx.pop() // nil
stackEx.isEmpty // true
출처
https://gimjinging.tistory.com/83
https://babbab2.tistory.com/85
https://the-brain-of-sic2.tistory.com/38