본문 바로가기
codes/자료구조

[Stack] 구현

by Mia_ 2023. 2. 12.
class Stack {
  constructor() {
    this.storage = {};
    this.top = -1; // 스택의 가장 상단을 가리키는 포인터 변수를 초기화 합니다.
  }

  size() {
    return this.top +1;
  }

  // 스택에 데이터를 추가 할 수 있어야 합니다.
  push(element) {
    this.top += 1;
    this.storage[this.top] = element;
  }
	
  // 가장 나중에 추가된 데이터가 가장 먼저 추출되어야 합니다.
  pop() {
    // 빈 스택에 pop 연산을 적용해도 에러가 발생하지 않아야 합니다
    if (this.size() <= 0) {
      return;
    }

    const result = this.storage[this.top];
    delete this.storage[this.top];
    this.top -= 1;
    
    return result;
  }
}

- 세로로 세워진 통이라고 생각했을 때

- 아무것도 들어와 있지 않으면 포인터 변수가 -1임

- 1이 들어왔다고 하면 포인터 변수가 -1에서 --> 0으로 바뀌어야 함 ; stack.push(1)

- 뒤이어 2가 들어오면 this.top += 1 ---> 0+1 ---> 1가 됨 ;stack.push(2)

- 그럼 상태가 sotrage에 {1,2} 일꺼고 그럼 size는 2여야 함

- 그렇다면 this.top은 지금 1임 그래서 size()는 this.top + 1을 리턴함

- pop을 할 때는 빈 스택에 pop을 적용해도 에러가 발생하지 않도록 엣지 케이스를 처리해줘야하는데

- size가 0보다 작거나 같을 때를 처리해주면 됨 

'codes > 자료구조' 카테고리의 다른 글

[Queue] 구현  (0) 2023.01.15
[Stack] 구현  (0) 2023.01.15
[Stack] 브라우저 뒤로가기 앞으로가기  (0) 2023.01.12