stack
์คํ
์คํ: Last In First Out
ํ: First In First Out

ํธ์ถ์คํ ๋ถ์

์ฐ์ ํธ์ถ๊ณผ ์ ์ธ์ ๊ตฌ๋ณํด์ผํ๋ค.
(์ต๋ช )์คํ: ์คํํ๋ ค๋ ํ์ผ์ ํ๋์ ์ต๋ช ํจ์๋ก ๋ณด๋ฉด ๋๋ค.
ํจ์๊ฐ ํธ์ถ๋๋ฉด ์ ์ธ๋ถ๊ฐ ์คํ๋จ -
a()
ํธ์ถ์ด ์๊ธฐ๊ณ ํธ์ถ์คํ์ a๊ฐ ๋ค์ด๊ฐ๋ค.7๋ฒ์งธ ์ค ์ฝ๋๊ฐ ์คํ๋๋ค.
9๋ฒ์งธ ์ค
console
๋ ํธ์ถ์ด๊ธฐ ๋๋ฌธ์ ํธ์ถ์คํ์ log๊ฐ ๋ค์ด๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ๋ก 10๋ฒ์งธ ์ฝ๋์ธfunction b()
๋ก ๊ฐ๋๊ฒ ์๋๋ผconsole.log(โaโ)
์ ์ ์ธํ ๋ถ๋ถ์ผ๋ก ๊ฐ์ผํ์ง๋ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ํธ์ถ์คํ์๋ ๋ณด์ด์ง ์๋๋ค. ํธ์ถ์คํ์ ๋ค์ด๊ฐ๋ค๊ฐ ๋น ์ก๋ค๊ณ ๋ณด๋ฉด ๋๋ค.15๋ฒ์งธ ์ค
b()
๊ฐ ํธ์ถ์คํ์ผ๋ก ๋ค์ด๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ 10๋ฒ์งธ ์ค์b()
์ ์ ์ธ ๋ถ๋ถ์ผ๋ก ๋์๊ฐ๋ค.12๋ฒ์งธ ์ค
console.log(โbโ)
๊ฐ ํธ์ถ์คํ์ ๋ค์ด๊ฐ๋ค๊ฐ ๋น ์ง๋ค.13๋ฒ์งธ ์ค
c()
๊ฐ ํธ์ถ ์คํ์ผ๋ก ๋ค์ด๊ฐ๋ค. (14๋ฒ์งธ ์ค๋ก ๊ฐ๋๊ฒ ์๋๋ผ) 2๋ฒ์งธ ์คc()
์ ์ธ๋ถ๋ก๋ก ๋์๊ฐ๋ค.4๋ฒ์งธ ์ค
console.log(โcโ)
๊ฐ ํธ์ถ์คํ์ ๋ค์ด๊ฐ๋ค ๋น ์ง๋ค.
์ ์ธ๋ถ๊ฐ ๋ชจ๋ ์คํ๋๋ฉด ์ด์ ํธ์ถ์คํ์ ์์ธ ํธ์ถ๋ค์ด ๋น ์ ธ๋๊ฐ ์ฐจ๋ก๋ค.
5๋ฒ์งธ ์ค
c()
ํจ์๊ฐ ๋๋๋ฉดc
๊ฐ ๋น ์ ธ๋๊ฐ๋ค.14๋ฒ์งธ ์ค์
b()
ํจ์๊ฐ ๋๋๋ฉด์b
๊ฐ ๋น ์ ธ๋๊ฐ๋ค.16๋ฒ์งธ ์ค์
a()
ํจ์๊ฐ ๋๋๋ฉด์a
๊ฐ ๋น ์ ธ๋๊ฐ๋ค.19๋ฒ์งธ ์ค์
c()
ํจ์๊ฐ ํธ์ถ๋๋ฉด์ 2๋ฒ์งธ ์ค์c()
ํจ์๊ฐ ์คํ๋๋ค. 4๋ฒ์งธ ์ค์console.log(โcโ)
๊ฐ ํธ์ถ์คํ์ ๋ค์ด๊ฐ๋ค ๋น ์ง๋ค.
๊ฒฐ๋ก : ํธ์ถํ ๋๋ง๋ค ํธ์ถ์คํ์ ๋ค์ด๊ฐ๊ณ ํจ์๊ฐ ๋๋ ๋๋ง๋ค ํธ์ถ์คํ์์ ๋น ์ ธ๋์จ๋ค.
์คํ ๋ฉ์๋ ํ์ฉ
class ArrayStack {
static SIZE = 3;
constructor(size = ArrayStack.SIZE) {
this.stack = new Float32Array(size);
this.top = -1;
}
push(data) {
// ์์ธ์ฒ๋ฆฌ
if (typeof data !== 'number') {
throw new Error('์ซ์๋ฅผ ์
๋ ฅํด์ฃผ์ธ์');
}
// ArrayStack์ top๊ณผ ArrayStack์ size(3 - 1) ์ด ๊ฐ์ผ๋ฉด Stack Overflow
if (this.top === this.size - 1) {
throw new Error('์คํ์ด ๊ฐ๋ ์ฐผ์ต๋๋ค (Stack Overflow) \\n');
}
// ์๊ธฐ 2๊ฐ์ง edge case ์ธ์๋ ์คํ ๋์ push
this.stack[++this.top] = data;
}
pop() {
// ์คํ ๋ถ์กฑํ์ ํ์ธ ์์ธ์ฒ๋ฆฌ
if (this.top === -1) {
console.error('์คํ์ด ๋น์ด์์ต๋๋ค (Stack Underflow)');
return null;
}
return this.stack[this.top--];
}
// ๊ฐ์ฅ ๋ฆ๊ฒ ๋ค์ด์จ ์๋ฃ์ธ '์ต์์ ์๋ฃ'๋ฅผ ์ฝ์ ํ ์ด๋ฅผ ๋ฐํํ๋ ์ฐ์ฐ
peek() {
return this.stack[this.top];
}
// top์ด 0๋ณด๋ค ์์์ง ํ์ธ boolean๊ฐ ๋ฐํ
isEmpty() {
return this.top < 0;
}
}
const arrayStack = new ArrayStack(3)
// arrayStack.push(1)
// arrayStack.push(2)
// arrayStack.push(2)
// arrayStack
// > ArrayStack {stack: Float32Array(3), top: 2}
// **stack**: Float32Array(3) [1, 2, 3, buffer: ArrayBuffer(12), byteLength: 12, byteOffset: 0, length: 3, Symbol(Symbol.toStringTag): 'Float32Array'] **top**: 2
// arrayStack.pop()
// > 3
// arrayStack.pop()
// > 2
// arrayStack.pop()
// > 1
// arrayStack.isEmpty()
// > false
// arrayStack.pop()
// > ์คํ์ด ๋น์ด์์ต๋๋ค (Stack Underflow)
peek ๋๋ top : stack์ ๊ฐ์ฅ ์์ ์๋ ๊ฐ(ํ์ฌ ๊ฐ)์ ๋ฐํํ๋ค.
push : stack์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ค.
pop : stack์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ค.
empty : stack์ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ์ฐธ(true), ์์ผ๋ฉด ๊ฑฐ์ง(false)์ ๋ฐํํ๋ค.
์คํ์ Big O
์ฝ์ : O(1)
์ ๊ฑฐ: O(1)
๊ฒ์: O(n)
์ ๊ทผ: O(n)
Last updated