Stack
스택은 책을 쌓는 것처럼 데이터를 차곡차곡 쌓아 올리는 자료구조이다.
LIFO의 특징을 활용하면 다음과 같은 경우에 스택 자료구조를 사용할 수 있다.
배열을 사용하지 않은 경우 다음과 같이 구현할 수 있다.
class Stack {
constructor() {
this.storage = {};
this.top = 0;
}
size() {
return this.top;
}
push(element) {
this.storage[this.top] = element;
this.top += 1;
}
pop() {
if(this.size()<1) {
return;
}
const result = this.storage[this.top-1];
delete this.storage[this.top-1];
this.top -= 1;
return result;
}
}
Queue
데이터가 줄을 서서 기다리는 것처럼 FIFO 특징을 갖는 자료구조이다.
자바스크립트의 배열의 shift
, push
사용해 큐를 흉내내서 구현할 수 있다. 하지만, shift
로 첫번째 요소를 제거할 경우, 배열 내부에서는 재정렬이 일어나므로 시간 복잡도가 실제 큐에 비해 커진다. 실제로 큐에서는 첫번째 요소를 제거하는데 O(1)이 걸리지만, 배열을 이용한 경우, 첫번째 요소를 제거하고 배열 전체를 순회하면서 남은 배열들의 요소를 앞으로 한칸씩 당겨주는 데에 추가적인 시간이 소요된다. 따라서 다음과 같이 구현할 수 있다.
class Queue {
constructor() {
this.storage = {};
this.front = 0;
this.rear = 0;
}
size() {
return this.rear - this.front;
}
enqueue(element) {
this.storate[this.rear] = element;
this.rear += 1;
}
dequeue() {
if(this.size() === 0) {
return;
}
const result = this.storate[this.front];
delete this.storate[this.front];
this.front += 1;
return result;
}
}