μ΄λ² μ€νλ¦°νΈμμλ μλ£ κ΅¬μ‘°μ λν λ΄μ©μ΄λ€.
κ·Έ μ€μμλ μ€λμ μλ£ κ΅¬μ‘°κ° λ¬΄μμΈμ§? κ·Έ μ€μμ stackκ³Ό queueμ λν΄μ λ€λ£¨μ΄ λ΄€λ€.
μλ£ κ΅¬μ‘°μ λν΄μ 곡λΆν΄λ³΄λ건 μ²μμ΄μλ€. call stack λλ¬Έμ stackμ΄ μ΄λ€κ±΄μ§ λμΆ© κ°μ μμ§λ§
queueμ λν΄μλ μμ μ²μ 보λ λ΄μ©μ΄μλ€.
κ³Όμ λ₯Ό μ§ννλ©΄μ μ§μ μλ£κ΅¬μ‘°λ₯Ό λ§λ€μ΄λ³΄κ³ λ©μλλ₯Ό μΆκ°ν΄λ³΄λ©΄μ μ μΆμμ κ°λ
μ΄ μ μ©λ data ꡬ쑰λ₯Ό λ§λλ 거ꡬλλΌκ³ κΉ¨λ¬μλ€.
μμ μ§μ λ§λ€μ΄λ³΄λκ² μ΅κ³ ...
μ£Όλ§μ κ° μλ£κ΅¬μ‘°μ μ₯, λ¨μ κ³Ό μ΄λ€ μν©μμ μ΄λ€ μλ£κ΅¬μ‘°λ₯Ό μ¬μ©ν΄μ ν¨μ¨μ±μ λμΌ μ μμκΉ μ 리λ₯Ό ν΄μΌκ² λ€.
μλ£κ΅¬μ‘°(θ³ζζ§ι , μμ΄: data structure)λ μ»΄ν¨ν° κ³Όνμμ ν¨μ¨μ μΈ μ κ·Ό λ° μμ μ κ°λ₯μΌ νλ μλ£μ μ‘°μ§, κ΄λ¦¬, μ μ₯μ μλ―Ένλ€. λ μ νν λ§ν΄, μλ£ κ΅¬μ‘°λ λ°μ΄ν° κ°μ λͺ¨μ, λ λ°μ΄ν° κ°μ κ΄κ³, κ·Έλ¦¬κ³ λ°μ΄ν°μ μ μ©ν μ μλ ν¨μλ λͺ λ Ήμ μλ―Ένλ€. μ μ€ν μ νν μλ£κ΅¬μ‘°λ λ³΄λ€ ν¨μ¨μ μΈ μκ³ λ¦¬μ¦μ μ¬μ©ν μ μκ² νλ€. μ΄λ¬ν μλ£κ΅¬μ‘°μ μ νλ¬Έμ λ λκ° μΆμ μλ£νμ μ νμΌλ‘λΆν° μμνλ κ²½μ°κ° λ§λ€. ν¨κ³Όμ μΌλ‘ μ€κ³λ μλ£κ΅¬μ‘°λ μ€νμκ° νΉμ λ©λͺ¨λ¦¬ μ©λκ³Ό κ°μ μμμ μ΅μνμΌλ‘ μ¬μ©νλ©΄μ μ°μ°μ μννλλ‘ ν΄μ€λ€.
μΆμ² - μν€ λ°±κ³Ό
μλ£ κ΅¬μ‘°μ νΉμ§μ 3κ°μ§κ° μλ€.
μ€λ λ€λ£¨μλ stackκ³Ό queueλ μΌλ¨ μ ν ꡬ쑰μ ννλ₯Ό λκ³ μλ€.
Last in first out - LIFO μ μλ£κ΅¬μ‘°μ΄κ³
stack
class Stack {
constructor() {
this.store = [];
}
push(item) {
this.store.push(item);
}
pop() {
return this.store.pop();
}
top() {
return this.store[this.store.length - 1];
}
}
const stack = new Stack();
stack.push(123);
stack.push(2);
stack.push(3);
stack.pop();
stack.push(4);
console.log(stack.top()); // 4
console.log(stack.store); // [123,2,4]
First in first out - FIFO μ μλ£κ΅¬μ‘°μ΄κ³
queue
class Queue {
constructor() {
this.store = [];
}
enqueue(item) {
this.store.push(item);
}
dequeue() {
return this.store.shift();
}
}
const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.enqueue(4);
console.log(queue.dequeue()); //1
console.log(queue.dequeue()); //2
console.log(queue.store); //[3,4]
PriorityQueue
class PriorityQueue {
constructor() {
this.store = [];
}
enqueue(item) {
this.store.push(item);
}
dequeue() {
let entry = 0;
this.store.forEach((item, index) => {
if (this.store[entry] < this.store[index]) {
entry = index;
}
});
return this.store.splice(entry, 1);
}
}
const priorityQueue = new PriorityQueue();
priorityQueue.enqueue(10);
priorityQueue.enqueue(30);
priorityQueue.enqueue(20);
priorityQueue.enqueue(70);
priorityQueue.enqueue(50);
priorityQueue.dequeue();
priorityQueue.dequeue();
priorityQueue.dequeue();
console.log(priorityQueue.store); // [10,20]