안녕하세요? 소들입니다 :)
이번 포스팅에선 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 count: Int {
return stack.count
}
public var isEmpty: Bool {
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 등등 좀 어려운 내용은
다시 친절하게 포스팅 해보겠습ㄴ디ㅏ 👽
(어려운 내용은 포스팅 해야 내 스스로 이해가 잘 돼서..)
'Algorithm > 자료구조' 카테고리의 다른 글
Swift) 이진 탐색 트리(BST) 구현 해보기 (1/2) (5) | 2021.01.06 |
---|---|
Swift) 해시 테이블(Hash Table) 이해하기 (13) | 2021.01.05 |
Swift) 양방향 연결 리스트(Doubly LinkedList) 구현 해보기 (5) | 2021.01.04 |
Swift) 단방향 연결 리스트(LinkedList) 구현 해보기 (6) | 2020.12.29 |
Swift) 큐(Queue) 구현 해보기 (6) | 2020.12.28 |