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 |