ARC ( Auto Reference Counter ) 공부하는데 메모리 구조를 알아야 할거 같아 메모리 구조 슬쩍 보고, 메모리 구조 포스팅 이전에 Stack을 소개해드려야 할 거 같았습니다.
오늘은 자료구조인 Stack에 대해 알아보시죠! … 쓰다 보니 자료구조도 간단히 소개해드려야겠습니다.. 이게 맞나!
Stack 이란?
스택은 LIFO ( Last In First Out ) 형식의 자료구조입니다. 영어는 잘하진 못했어도! Last In First Out 느낌 오셔야합니다…
가장 최근에 추가 된 것을 가장 먼저 배출하는 것입니다. Stack이라는 용어처럼 데이터를 한층 한층 쌓아 저장하고, 배출할 때는 가장 꼭대기 데이터를 주고
스택의 대표적인 연산자는 다음과 같습니다
∙ push : 데이터를 가장 윗 부분에 추가
∙ pop : 가장 위에 있는 데이터를 배출
∙ peek : 가장 위에 있는 데이터를 반환
∙ isEmpty : 스택이 비어있는 여부를 반환
그럼 swift 로 Stack을 구현해봅시다!
Stack 구현
swift 기본 제공해주는 배열을 통해 stack을 구현한 예시입니다.
struct Stack<T> {
var stack: [T] = []
mutating func push(_ item: T) {
stack.append(item)
}
mutating func pop() -> T? {
if(isEmpty() == true) {
return nil
}
let item = stack[stack.count-1]
stack.removeLast()
return item
}
func peek() -> T? {
if(isEmpty() == true) {
return nil
}
let item = stack[stack.count-1]
return item
}
func isEmpty() -> Bool {
return stack.isEmpty
}
func printInfo() {
print(stack)
}
}
아래와 같이 동작합니다
var snackStack = Stack<String>()
snackStack.push("쵸코파이")
snackStack.push("새우깡")
snackStack.printInfo() // ["쵸코파이", "새우깡"]
print(snackStack.pop()) // Optional("새우깡")
snackStack.printInfo() // ["쵸코파이"]
snackStack.push("맛동산")
print(snackStack.peek()) // Optional("맛동산")
정리
swift에서는 Stack을 제공하지 않는 것으로 알고 있습니다! 사실 위와 같이 Stack을 구현하지 않아도, swift 배열에서는 Stack 기능을 제공합니다!
.popLast() 와 같이… 그래도 한번쯤 구현해보는 것도 공부하는데 나쁘지 않은거 같습니다.
다음에는 스택과 반대인 큐에 대해 포스팅하지 않을까.. 오늘도 고생하셨습니다 :)
참고자료
https://babbab2.tistory.com/85
https://gmlwjd9405.github.io/2018/08/03/data-structure-stack.html
'알고리즘 & 문제풀이' 카테고리의 다른 글
코딩 기술 - Comparable (0) | 2023.02.03 |
---|---|
프로그래머스 - L1 문자열 내 마음대로 정렬하기 (0) | 2023.02.03 |
프로그래머스 - L1 최대공약수와 최소공배수 (0) | 2023.01.31 |
프로그래머스 - L1 문자열 내 p와 y의 개수 (0) | 2023.01.30 |
프로그래머스 - L1 과일장수 (0) | 2023.01.30 |