์ง๋ ๋ฉด์ ์ค ํ ๋ฒ์ ํ์ ์คํ์ ํ์ดํธ๋ณด๋์ ๊ฐ๋จํ๊ฒ ๊ตฌํํด๋ณด๋ผ๋ ์๊ฐ์ด ์์๋ค. ์ฝ๋ฉ์ ํ์ง๋ง ์์ฌ์ด ๋ถ๋ถ์ด ๋จ์ ๋ค์ ์ ๋ฆฌํด๋ณธ๋ค.
ํ์ ์คํ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๋ฃ๊ตฌ์กฐํ์ด๋ฉด์ ์ ํ(linear)์๋ฃ๊ตฌ์กฐ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ค๋ฅธ ์ธ์ด์๋ ๋ค๋ฅด๊ฒ Array๋ก ๊ตฌํ์ด ์ถฉ๋ถํ๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ ๊ตฌํํด๋ณด์.
ํ (Queue)
ํ๋ ๋จผ์ ์ง์ด๋ฃ์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ค๋ ์ ํ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ด ํน์ง์ ์ค์ฌ์ **FIFO(First In First Out)**๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ง์ด๋ฃ๋ enqueue
- ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ dequeue
- ํ์ฌ ๋ฐ์ดํฐ์ ๊ธธ์ด length
- ๋ค์์ ๋์ฌ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ๋ peek
- ํ์ฌ ํ๊ฐ ๋น์ด์๋์ง๋ฅผ ํ์ธํ๋ isEmpty
- ํ์ฌ ํ๋ฅผ ์ด๊ธฐํํ๋ clear
์ 6๊ฐ์ง ์ ๋ ๊ธฐ๋ฅ๋ง ๊ตฌํํด๋ณด๋๋ก ํ์.
class Queue {
constructor() {
this.arr = [];
}
enqueue(value) {
this.arr.push(value);
}
dequeue() {
return this.arr.shift();
}
length() {
return this.arr.length;
}
peek() {
return this.arr[0];
}
isEmpty() {
return this.arr.length === 0;
}
clear() {
this.arr = [];
}
}
const queue = new Queue();
// ๋ฐ์ดํฐ ์ฝ์
queue.enqueue(1); // arr: [1]
queue.enqueue(20); // arr: [1, 20]
queue.enqueue(300); // arr: [1, 20, 300]
// ๋ฐ์ดํฐ ์ถ์ถ
queue.dequeue(); // 1
// ํ์ฌ ํ ๊ธธ์ด
queue.length(); // 2
// ๋ค์์ ์ถ์ถ๋ ๋ฐ์ดํฐ
queue.peek(); // 20
// ํ๊ฐ ๋น์ด์๋์ง ํ์ธ
queue.isEmpty(); // false
// ํ ์ด๊ธฐํ
queue.clear();
๊ฐ๋จํ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค. ์ฌ๊ธฐ์ ์กฐ๊ธ ๋ ์ ๊ฒฝ์ ์ด๋ค๋ฉด, dequeue๋ peek๊ฐ์ ๊ฒฝ์ฐ๋ ๋ฐฐ์ด์ด ๋น์ด์์ ๊ฒฝ์ฐ์๋ undefined๋ฅผ ๋ฆฌํดํ ํ
๋ฐ ๊ทธ ๋ถ๋ถ์ ํน์ ํ ๋ฐ์ดํฐ๋ ๋ฉ์์ง๋ก ๋ณํํ๋ ์ ๋, ๋๋ ๋น์ด์๋ค๊ณ ์๋ฌ๋ฉ์์ง๋ฅผ ์ฃผ๋ ์ ๋๋ก ํ๋์ด ๊ฐ๋ฅํ๊ฒ ๋ค.
์คํ (Stack)
์คํ ๋์ค์ ์ง์ด๋ฃ์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ค๋ ์ ํ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ด ํน์ง์ ์ค์ฌ์ **LIFO(Last In First Out)**๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ง์ด๋ฃ๋ push
- ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ pop
- ํ์ฌ ๋ฐ์ดํฐ์ ๊ธธ์ด length
- ๋ค์์ ๋์ฌ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ๋ peek
- ํ์ฌ ์คํ์ด ๋น์ด์๋์ง๋ฅผ ํ์ธํ๋ isEmpty
- ํ์ฌ ์คํ์ ์ด๊ธฐํํ๋ clear
ํ์ ๊ฐ์ด, ์ 6๊ฐ์ง ์ ๋ ๊ธฐ๋ฅ๋ง ๊ตฌํํด๋ณด๋๋ก ํ์.
class Stack () {
constructor () {
this.arr = []
}
push (value) {
this.arr.push(value)
}
pop () {
return this.arr.pop()
}
length () {
return this.arr.length
}
peek () {
return this.arr[this.arr.length - 1]
}
isEmpty () {
return this.arr.length === 0
}
clear () {
this.arr = []
}
}
const stack = new Stack()
// ๋ฐ์ดํฐ ์ฝ์
stack.push(1) // arr: [1]
stack.push(20) // arr: [1, 20]
stack.push(300) // arr: [1, 20, 300]
stack.push(4000) // arr: [1, 20, 300, 4000]
// ๋ฐ์ดํฐ ์ถ์ถ
stack.pop() // 4000
// ํ์ฌ ์คํ ๊ธธ์ด
stack.length() // 3
// ๋ค์์ ์ถ์ถ๋ ๋ฐ์ดํฐ
stack.peek() // 300
// ์คํ์ด ๋น์ด์๋์ง ํ์ธ
stack.isEmpty() // false
// ์คํ ์ด๊ธฐํ
stack.clear()
๋ง๋ฌด๋ฆฌ
๊ฐ๋จํ๊ฒ ๊ตฌํํด๋ณด์๋ค. ์ ๋ ์ด๋ ต์ง ์์ผ๋ฉฐ ์ดํดํ๊ณ ์์ผ๋ฉด ๋ถ๋ช ๋์๋ ๋ด์ฉ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์ดํด๋ณด๋ฉด ์ฝ ์คํ, ํ์คํฌ ํ ๋ผ๋ ์ฉ์ด๊ฐ ๋ฑ์ฅํ๋๋ฐ, ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์๊ณ ์์ผ๋ฉด ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ์ดํดํ๊ธฐ ์์ํ ๊ฒ์ด๋ค.