-
[Data Structure] ์คํ (Stack)Data Structure 2022. 2. 9. 02:34
์๋ ํ์ธ์!
์ค๋์ Stack์ ๋ํด์ ํฌ์คํ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค!
1. Stack์ด๋?
Stack์ ๊ฐ์ ํ์ชฝ ๋์์๋ง ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ์ ์๋ ๊ฒ์ผ๋ก, LIFO (Last-In-First-Out) ๊ตฌ์กฐ์ ๋๋ค.
์๋ก์ด ์์๋ฅผ ์๋๋ถํฐ ์ฐจ๋ก๋๋ก ํ๋์ฉ ์๋ ๊ฒ์ผ๋ก, ์์๋ฅผ ์ง์ธ ๋์๋ ์ ์ผ ์์ ์๋ ์์๊ฐ ์ ์ผ ๋จผ์ ์ง์์ง๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๋์ค์ ๋ค์ด์จ ์์๊ฐ ๋จผ์ ๋๊ฐ๊ฒ ์ฃ ? ๊ทธ๋์ Stack์ LIFO ๊ตฌ์กฐ์ ๋๋ค.
์ ์ผ ์์ ์๋ ์์๋ฅผ top element, ์ ์ผ ์๋์ ์๋ ์์๋ฅผ bottom element๋ผ๊ณ ํฉ๋๋ค.
์ฆ, Stack์ top์ ์์น์์๋ง ์์์ ์ฝ์ ๊ณผ ์ ๊ฑฐ๊ฐ ์ด๋ฃจ์ด์ง๋ ์์ฐจํ๋ ๋ฆฌ์คํธ์ ๋๋ค.

a0: bottom element, a3: top element Stack์ด ๋ญ์ง ์์๋ดค์ผ๋, ์ด์ Stack์ ์ฑ์ง์ ๋ํด์ ์์๋ณด๋๋ก ํ ๊ฒ์!
Stack์ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๋ ๊ฒ์ ํ์ชฝ ๋์์๋ง ๊ฐ๋ฅํ๋ค๊ณ ํ์ฃ ?
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์์ ์ถ๊ฐ/์ ๊ฑฐ์ ์๊ฐ๋ณต์ก๋๋ O(1)์ ๋๋ค.
Stack์ ์ ์ผ ์์ ์๋ ์์๋ฅผ ํ์ธํ ๋์ ์๊ฐ๋ณต์ก๋๋ O(1)์ ๋๋ค. ์ ์ผ ์์ ์์๋ง ํ์ธํ๋ฉด ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด์ฃ !
๊ทธ๋ฆฌ๊ณ Stack์ ์ ์ผ ์์ ์๋ ์์๋ฅผ ์ ์ธํ ๋๋จธ์ง ์์๋ค์ ํ์ธํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.
2. Stack ๊ตฌํํด๋ณด๊ธฐ
Stack์ ๊ตฌํํ๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
struct Stack<T> { private var stack: [T] = [] // stack์ด ๋น์ด์๋์ง ์ฌ๋ถ ํ์ธ var isEmpty: Bool { return stack.isEmpty } // stack์ ์ ์ผ ์์ ์์ ํ์ธ var top: T? { return stack.last } // stack์ ์์ ๊ฐฏ์ var count: Int { return stack.count } // stack์ ์์ ์ถ๊ฐ mutating func push(_ element: T) { stack.append(element) } // stack์ ๋ง์ง๋ง ์์ ๋นผ๊ธฐ mutating func pop() -> T? { return stack.popLast() } }๋ค์ํ ์๋ฃํ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด Generic ์ผ๋ก ์ ์ธํ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ stack์ด๋ ๋ฐฐ์ด์ ์คํ์ ๋ง๋ค์ด์ ์ฌ์ฉํ๋ฉด ๋๋ต๋๋ค!
var myStack = Stack<Int>() myStack.push(0) myStack.push(1) myStack.push(2) myStack.push(3) print(myStack) // Stack<Int>(stack: [0, 1, 2, 3]) print("top:", myStack.top) // 3 print("stack size:", myStack.count) // 4 myStack.pop() // ์ ์ผ ์์ ์์์ธ 3์ pop print("top:", myStack.top) // 2 myStack.pop() // ์ ์ผ ์์ ์์์ธ 3์ pop myStack.pop() // ์ ์ผ ์์ ์์์ธ 2๋ฅผ pop myStack.pop() // ์ ์ผ ์์ ์์์ธ 1์ pop print("isEmpty:", myStack.isEmpty) // true print("top:", myStack.top) // nil์ค์ ๋ก ์ฌ์ฉ์ ํด๋ณด๋ฉด ์๋์ ๊ฐ์ด ๊ฒฐ๊ณผ๋ ํ์ธํ ์ ์์ต๋๋ค.

'Data Structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Data Structure] ๊ทธ๋ํ์ ํธ๋ฆฌ (0) 2022.03.14 [Data Structure] ํ (Queue) (0) 2022.02.13 [Data Structure] Linked List (Feat. Array) (0) 2022.01.12