[TIL] Data Structure - Stack & Queue

woojun kang·2020년 9월 7일
0

Stack


: stack은 책이 일자로 쌓여있는 형태의 자료구조이다. 새로운 책을 쌓을 때 가장 위에 놓이게 되고, 책을 꺼낼때에도 가장 위에 책을 꺼낸다. 마지막에 추가된 데이터가 가장 먼저 나가는 이러한 특징을 LIFO(Last in, First out)라 한다.

Stack Implementation

: Javascript의 Array API 중 push()pop()이 stack의 특징을 대표하는 예시이다. stack을 배열로 구현하면 다음과 같다.

class Stack {
    constructor(){
        this.data = [];
        this.top = 0;
    }
}

push

: 가장 마지막(top position)에 element를 추가. top포지션은 가장 위에 빈 공간, 즉 새로 element가 추가될 공간을 가르키기에 요소 추가 시 1씩 증가.

push(element) { 
  this.data[this.top] = element;
  this.top++;
  // no return value

peek

: top 포지션에 위치한 element 반환. pop()와 리턴 값이 같으나, peek()은 전체 stack의 변화 없음.

peek() {
  return this.data[this.top-1];
}

pop

: 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


: queue는 식당에 줄 서있는 형태와 유사한 자료구조이다. 가장 마지막에 들어온 손님(element)이 가장 마지막에 식당에 들어가는 LILI(Last in, Last out)의 특징을 갖는다.

Queue Implementation

: 자료가 추가될 때에는 stack과 마찬가지로 push()를 사용할 수 있고, 자료를 제거할 때에는 array API에 shift()를 활용할 수 있다.

enqueue

enqueue(element) {
  this.data.push(element);
}

dequeue

dequeue() {
 return this.data.shift(); 
}

0개의 댓글