본문 바로가기

Algorithm/자료구조

Swift) 스택(Stack) 구현 해보기

 

 

 

 

안녕하세요? 소들입니다 :)

이번 포스팅에선 Queue만큼 기본인 Stack을 Swift로 구현해보려 해요!

 

파이썬에선 Stack을 구현할 때 배열을 이용하던데,

Swift 또한 Queue처럼 배열을 이용해서 구현하면 쉽게 할 수 있어요!!! :D

뭐.. Stack LIFO고.. push, pop 같은 것들이 있죠..!

 

Queue, Stack은 기본 설명 없이 갈 것이기 때문에,

만 Stack이 뭔지 모르신다면 대략난감입니다

 

그럼 고고씽

모든 포스팅은 편의 말투로 합니다~!!

 

 

 

 

1. Swift로 Stack 구현하기

 

Queue처럼 Stack 또한 구조체와 배열로 다음과 같이 만들 수 있음

 

 

struct Stack<T> {
    private var stack: [T= []
    
    public var countInt {
        return stack.count
    }
    
    public var isEmptyBool {
        return stack.isEmpty
    }
    
    public mutating func push(_ element: T) {
        stack.append(element)
    }
    
    public mutating func pop() -> T? {
        return isEmpty ? nil : stack.popLast()
    }
}
 

 

 

이렇게 Queue와 똑같이 구현해주면됨!!!

실제 위 Stack을 사용하면,

 

이런 식으로 구현하고, 실제 사용은 다음과 같이 하면 됨

 

 

var myStack = Stack<Int>()
myStack.push(10)
myStack.pop()

 

 

근데 눈치 챘을랑가

LIFO인 Stack의 경우 Queue와 달리

마지막에  element가 추가되고(append) 따라서 O(1) 이 되고,

마지막 element가 삭제되기 때문에 (popLast) 따라서 O(1) 이 됨

 

 

 

 

따라서 딱히 배열을 댕기고 움직이고 하는 오버헤드가 발생하지 않음!!!!!!!

(이부분에 대해 모른다면 Queue 포스팅부터 보고오셈)

 

또한,

removeLast와 동일한 함수인 popLast란 함수 자체를

Swift 배열에서 지원해주고 있음

 

그말이 뭐냐면

걍 배열을 Stack처럼 쓰라.....!!!!!!

이름도 pop으로 해서 지원하지 않느냐!!!!!!!1

 

따라서, Swift에서 굳이 Stack을 만들어 사용하지 않아도,

배열 append, popLast 만으로도 충분히 배열을 Stack처럼 사용 가능하다 :)

뭐 굳이 만들고 싶으면 만들어서 써도 무방하셈

 

 

 

 

+ Stack 또한 Protocol을 준수할 수 있지만

굳이 왜 해야하는지 이해를 못해서 (그럴바에 걍 배열 씁시다 =_=)

먼 훗날 이해하면 추가함

 

.

.

.

 

흐움.. Queue와 Stack은 쉬워서 코드로 끝났는데,

그 다음부턴 Linked List, Heap 등등 좀 어려운 내용은

다시 친절하게 포스팅 해보겠습ㄴ디ㅏ 👽

(어려운 내용은 포스팅 해야 내 스스로 이해가 잘 돼서..)



Calendar
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
최근 댓글
Visits
Today
Yesterday