2.1 스택(Stack)이란?

그림 2-2 | LIFO(Last In First Out)

그림 2-2 | LIFO(Last In First Out)

2.2 스택(Stack)의 활용 사례

2.3 스택(Stack) 관련 메서드 정리

2.4 스택(Stack) 구현

2.4.1 배열을 이용한 stack

class Stack {
    constructor() {
        this.items = [];  
    }

    // 새로운 요소 추가
    push(e) {
        this.items.push(e);
    }

    // 맨 위 요소 제거 후 반환, 비어있으면 'null'
    pop() {
        if (this.isEmpty()) { // 스택이 비어있는지 확인
            return null; // 비어있다면 'null' 반환
        }
        return this.items.pop(); // 맨 위 요소를 제거하고 반환
    }

    // 맨 위 요소 확인, 제거하지 않는다
    peek() {
        if (this.isEmpty()) { // 스택이 비어있는지 확인
            return null; // 비어있다면 'null' 반환
        }
        return this.items[this.items.length - 1]; // 맨 위 요소 반환
    }

    // 스택이 비어있는지 확인
    isEmpty() {
        return this.items.length === 0;
    }

    // 요소의 수 반환
    size() {
        return this.items.length;
    }

    // 모든 요소 제거
    clear() {
        this.items = [];
    }
}

let stack = new Stack();
stack.push(5); // 스택에 5 추가
stack.push(8); // 스택에 8 추가
console.log(stack.peek()); // 스택의 맨 위 요소 확인 (8)
stack.pop(); // 스택의 맨 위 요소 제거 (8 제거)
console.log(stack.peek()); // 스택의 맨 위 요소 확인 (5)