큐는 FIFO
원칙하에 운용되는 자료구조이다. 즉 가장 먼저 들어온 데이터가 가장 먼저 빠져나가야 하는 구조이며, 이는 스택과 상반되는 순서를 가진다.
Queue
를 독립적으로 자체 제공하지는 않지만 배열(Array
)를 이용하여 큐의 기능을 흉내낼 수 있다.shift()
라는 메서드가 있는데, 이는 배열의 가장 앞에 있는 원소부터 하나씩 제거하는 기능을 수행한다. 즉 배열의 pop()
메서드의 역방향이라고 볼 수 있다.FIFO
원칙을 적용한다는 점인데, 이 부분에서 원래 큐 자료구조의 시간복잡도와 상당한 차이가 발생하게 된다.shift()
메서드를 통해 원소를 앞에서 부터 하나씩 제거할 때, 나머지 배열 원소에 대한 재정렬이 이루어져야 하기 때문이다.export default class MyQueue {
constructor() {
this.input = [];
this.output = [];
this.size = 0;
}
enque(val) {
this.input.push(val);
this.size++;
}
deque() {
if (this.output.length === 0) {
this.output = this.input.reverse();
this.input = [];
}
this.size--;
return this.output.pop();
}
}
reverse()
를 이용하여 input의 순서를 뒤집는다.