: stack은 책이 일자로 쌓여있는 형태의 자료구조이다. 새로운 책을 쌓을 때 가장 위에 놓이게 되고, 책을 꺼낼때에도 가장 위에 책을 꺼낸다. 마지막에 추가된 데이터가 가장 먼저 나가는 이러한 특징을 LIFO(Last in, First out)라 한다.
: Javascript의 Array API 중 push()
와 pop()
이 stack의 특징을 대표하는 예시이다. stack을 배열로 구현하면 다음과 같다.
class Stack {
constructor(){
this.data = [];
this.top = 0;
}
}
: 가장 마지막(top position)에 element를 추가. top포지션은 가장 위에 빈 공간, 즉 새로 element가 추가될 공간을 가르키기에 요소 추가 시 1씩 증가.
push(element) {
this.data[this.top] = element;
this.top++;
// no return value
: top 포지션에 위치한 element 반환. pop()
와 리턴 값이 같으나, peek()
은 전체 stack의 변화 없음.
peek() {
return this.data[this.top-1];
}
: top 포지션에 위치한 element stack에서 제거. 제거된 요소를 반환.
pop() {
let topIdx = this.top-1;
let deletedVal = this.data[topIdx];
this.data = this.data.slice(0,topIdx);
this.top === 0 ? 0 : this.top--; // 0이 아닐 때 1씩 감소
return deletedVal;
: queue는 식당에 줄 서있는 형태와 유사한 자료구조이다. 가장 마지막에 들어온 손님(element)이 가장 마지막에 식당에 들어가는 LILI(Last in, Last out)의 특징을 갖는다.
: 자료가 추가될 때에는 stack과 마찬가지로 push()
를 사용할 수 있고, 자료를 제거할 때에는 array API에 shift()
를 활용할 수 있다.
enqueue(element) {
this.data.push(element);
}
dequeue() {
return this.data.shift();
}