์คํ (Stack) โ
์คํ์ ๋ฐ์ดํฐ๋ฅผ ์์๋๋ก ์๋ ํํ๋ก ๊ตฌ์ฑ๋ ์ ํ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ๋๋ ๋งจ ์์ ์๊ณ , ์ ๊ฑฐํ ๋๋ ๋งจ ์์ ๋ฐ์ดํฐ๋ถํฐ ์ ๊ฑฐ๋ฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ ํ์ ์ ์ถ(LIFO, Last In First Out) ๊ตฌ์กฐ๋ผ๊ณ ํฉ๋๋ค.
์คํ์ ํน์ง โ
- ํ์ ์ ์ถ(LIFO): ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋๊ฐ๋ ๊ตฌ์กฐ์ ๋๋ค.
- ๋จ์ํ ๊ตฌ์กฐ: ๊ตฌํ์ด ๊ฐ๋จํ๊ณ ํจ์จ์ ์ ๋๋ค.
- ์ ํ๋ ์ ๊ทผ: ํญ์ ์ต์๋จ ๋ฐ์ดํฐ๋ง ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค.
์ฃผ์ ์ฐ์ฐ โ
- push: ๋ฐ์ดํฐ๋ฅผ ์คํ์ ๋งจ ์์ ์ถ๊ฐํฉ๋๋ค.
- pop: ์คํ์ ๋งจ ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฐํํฉ๋๋ค.
- peek: ์คํ์ ๋งจ ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ๋ฐํํฉ๋๋ค.
- isEmpty: ์คํ์ด ๋น์ด์๋์ง ํ์ธํฉ๋๋ค.
TypeScript ๊ตฌํ ์์ โ
typescript
class Stack<T> {
private items: T[] = []
// ์คํ์ด ๋น์๋์ง ํ์ธ
isEmpty(): boolean {
return this.items.length === 0
}
// ๋ฐ์ดํฐ ์ถ๊ฐ
push(item: T): void {
this.items.push(item)
}
// ๋ฐ์ดํฐ ์ ๊ฑฐ ๋ฐ ๋ฐํ
pop(): T | undefined {
return this.items.pop()
}
// ๋งจ ์ ๋ฐ์ดํฐ ํ์ธ
peek(): T | undefined {
return this.items[this.items.length - 1]
}
// ์คํ ์ถ๋ ฅ
print(): void {
console.log(this.items.join(' '))
}
}
// ์ฌ์ฉ ์์
const stack = new Stack<number>()
stack.push(1)
stack.push(2)
stack.push(3)
stack.push(4)
stack.push(5)
stack.print() // ์ถ๋ ฅ: 1 2 3 4 5
console.log(stack.pop()) // ์ถ๋ ฅ: 5
console.log(stack.peek()) // ์ถ๋ ฅ: 4