본문 바로가기
Dev log

2020.07.23 - JavaScript에서 Stack과 Queue의 구현 - 1

by Pig_CoLa 2020. 7. 24.
SMALL

Stack과 Queue에 대하여 JavaScript에서 이를 구현해보기로 했다.

(Stack, Queue에 관한 내용은 이 페이지에서 상세하게 설명하지 않는다. 추후 정리하여 JavaScript 카테고리에 업로드 예정.)

 

Stack 구현을 위한 생각

배열 (Array)를 사용하지 않고 구현하자. (pop, unshift, push 등의 메서드 사용시 바로 해결되버린다..)

Stack클래스

Stack클래스를 정의하여 top, storage라는 인스턴스 속성을 만들어준다.

top은 들어올 값의 키값(추가될 때의 키값)을 의미하게 만들고 이는 곧 Stack의 크기가된다.

storage는 빈 오브젝트를 넣어준다.

push메서드

Stack에 전달인자를 추가하는 메서드

새로 들어온것이 가장 위에 추가된다.

 

전달인자를 storage에 추가한다. 키값은 현재 top의 값이다.

top의 값을 1 증가시킨다.

pop메서드

Stack에 쌓인 맨 위값을 삭제하고, 반환하는 메서드

가장 최근에 들어온 값을 반환한다.

 

top값을 1 감소시킨다.

storage에서 키를 현재 top로 갖는 값을 임시변수에 넣어준다.

storage에서 해당 키를 제거한다.

임시변수를 반환한다.

size메서드

Stack의 크기를 반환하는 메서드

top값을 반환한다.

실행중 발견한 오류

위 코드를 JavaScript코드로 작성시 오류가 발생했다.

의사코드 작성시 전혀 생각하지 못했는데,

pop메서드를 top이 0이하일 때 계속 실행하면 의도한대로 undefined를 return하지만

top값을 계속 감소시키게 된다.

해결방법

top값을 내리는 구문을 조건부 실행으로

현재 top값이 0이라면 내리지 않게 한다.

Stack구현 코드

구현 Code가 노출되니 과제, 학습 등으로 직접 구현을 희망한다면 이전페이지로 돌아가는 것을 권장한다

 

 

 

 

 

 

 

 

// Stack클래스
class Stack {
  constructor() {
    this.storage = {};
    this.top = 0;
  }

    // 현재 top의 값이 곧 Stack의 크기다.
  size() { return this.top; }

    push(element) {
    this.storage[this.top] = element;
    this.top += 1;
  }

    // 가장 위에 저장되어있는 값은 (현재 top값 - 1) 이므로 먼저 감소시켜야 한다.
  pop() {
    this.top -= this.top > 0 ? 1 : 0;
    const temp = this.storage[this.top];
    delete this.storage[this.top];
    return temp;
  }
}

느끼게 된점

의사코드를 작성할 때
특정 상황에서 벌어질 오류를 미리 예상해보면 더 좋을것 같다.

LIST

댓글