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://0ofkim.tistory.com/49

https://gimjinging.tistory.com/83

https://babbab2.tistory.com/85

https://the-brain-of-sic2.tistory.com/38

 

+ Recent posts