Stack์ ๊ตฌ์กฐ์ฒด์ ๋ฐฐ์ด๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
๋จผ์ ์ ๋ค๋ฆญ์ ์ด์ฉํด Stack ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํ๊ณ , ์ฃผ์ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค.
struct Stack<T> {
private var stack: [T] = []
var isEmpty: Bool {
return stack.isEmpty
}
var count: Int {
return stack.count
}
var peek: T? {
return stack.last
}
mutating func push(_ element: T) {
stack.append(element)
}
mutating func pop() -> T? {
return stack.popLast()
}
}
์ ์ฝ๋์์๋ Stack์ ๊ธฐ๋ณธ ๋์์ ๊ตฌํํ์ต๋๋ค.
- push(_:): ์คํ์ ์์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- pop(): ์คํ์ ๋งจ ์ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฐํํฉ๋๋ค.
- isEmpty: ์คํ์ด ๋น์ด์๋์ง ํ์ธํฉ๋๋ค.
- count: ์คํ์ ์์ ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค.
- peek: ์คํ์ ๋งจ ์ ์์๋ฅผ ๋ฐํํ์ง๋ง ์ ๊ฑฐํ์ง๋ ์์ต๋๋ค.
์ด Stack ๊ตฌ์กฐ์ฒด๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค
var intStack = Stack<Int>()
intStack.push(1)
intStack.push(2)
intStack.push(3)
print(intStack.pop()) // ์ถ๋ ฅ: Optional(3)
print(intStack.peek) // ์ถ๋ ฅ: Optional(2)
print(intStack.count) // ์ถ๋ ฅ: 2
print(intStack.isEmpty) // ์ถ๋ ฅ: false
๋ํ, Stack์ ๋ณ๋์ ๊ตฌ์กฐ์ฒด๋ก ๊ตฌํํ์ง ์๊ณ ๋ Array๋ฅผ ์ฌ์ฉํด ๋น์ทํ ๋ฐฉ์์ผ๋ก Stack์ฒ๋ผ ๋์ํ๋๋ก ํ ์ ์์ต๋๋ค.
var arrayStack = [Int]()
arrayStack.append(1) // push
arrayStack.append(2)
print(arrayStack.popLast() ?? 0) // pop
print(arrayStack.last ?? 0) // peek
Array๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฝ๋๊ฐ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ด์ง๋ง, ๋ช ๊ฐ์ง ๋จ์ ์ด ์์ ์ ์์ต๋๋ค.
- ๋งค๋ฒ ์คํ ์ฐ์ฐ(push, pop ๋ฑ)์ ๋ช ์์ ์ผ๋ก ์์ฑํด์ผ ํฉ๋๋ค.
- ์ด ๋ฐฐ์ด์ด ์คํ์ผ๋ก ์ฌ์ฉ๋๋ค๋ ์๋๊ฐ ๋ช ํํ์ง ์์ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์ดํดํ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์ ์ ์์ต๋๋ค
Stack ๊ตฌํํ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ด ์์ต๋๋ค.
- ์ธํฐํ์ด์ค ์ ํ: ์คํ์ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๋ฉฐ, ๋ถํ์ํ ์ฐ์ฐ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ์ถ์ํ: ๋ด๋ถ ๊ตฌํ์ ์จ๊ธฐ๊ณ , ์คํ์ ์๋๋ ์ฌ์ฉ๋ง ํ์ฉํฉ๋๋ค.
- ํ์ ์์ ์ฑ: ์ ๋ค๋ฆญ์ ์ฌ์ฉํด ๋ค์ํ ํ์ ์ ๋ํ ์์ ํ ์คํ์ ๋ง๋ค ์ ์์ต๋๋ค.
์๊ฐ ๋ณต์ก๋๋ Array์ ๊ฑฐ์ ๋์ผํ์ง๋ง, ์ฝ๋์ ๊ฐ๋ ์ฑ, ์์ ์ฑ, ์ ์ง๋ณด์์ฑ ์ธก๋ฉด์์ ํ ํ๋ก์ ํธ์์๋ Stack ๊ตฌ์กฐ์ฒด๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ๋ ์ ๋ฆฌํ ์ ์์ต๋๋ค.
'โจ๏ธ Language > swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Dequeue ๊ตฌํํ๊ธฐ (0) | 2024.09.27 |
---|---|
[Swfit] ํ(Queue) ๊ตฌํํ๊ธฐ (1) | 2024.09.27 |
[Swift] ์๋ ์ฐธ์กฐ ์นด์ดํธ (0) | 2024.04.02 |
[Swift] ์ ๋ค๋ฆญ (0) | 2024.04.02 |
[Swift] ํ๋กํ ์ฝ (0) | 2024.03.29 |