// (2021.2.23, 차재복, Cha Jae Bok, http://www.ktword.co.kr)
// 자바스크립트 내장 자료구조인 배열을 이용한 스택(LIFO) 구현
    // 기본 지원 메소드 : push(), pop(), peek(), size(), isEmpty(), clear()
/* 구현 */
// 스택 클래스
class Stack {
    // 생성자
    constructor() {
        this.items = [];    // 빈 배열에 의한 스택 생성
    }
    // top 원소 추가
    push(element) {
        this.items.push(element);
    }
    // top 원소 제거
    pop() {
        return this.items.pop();
    }
    // top 원소 살피기(반환)
    peek() {
        return this.items[this.items.length - 1];
    }
    // 크기
    size() {
        return this.items.length;
    }
    // 비어있는지 여부
    isEmpty() {
        return this.items.length === 0;
    }
    // 내용 비우기
    clear() {
        this.items = [];
    }
}
// 작성중 ...
/* 용법 */
/*
// 스택 인스턴스 생성
const stack = new Stack();
stack.isEmpty();    // => true
stack.push(3);      // 3 => [3]
stack.push(7);      // 7 => [3,7]
stack.push(9);      // 9 => [3,7,9]
stack.peek();       // => 9
stack.size();       // => 3
stack.pop();        // [3,7] => 9
stack.pop();        // [3] => 7
stack.pop();        // [] => 3
stack.size();       // => 0
*/
// 작성중 ...
/* [참고문헌] 
* Data Structures and Algorithms with JavaScript (2014) Michael McMillan
* Hands-on Data Structures and Algorithms with JavaScript (2018) Kashyap Mukkamala
* Learning JavaScript Data Structures and Algorithms (3rd 2018) Loiane Groner (*)
* JavaScript Data Structures and Algorithms (2019) Sammie Bae
* JavaScript Algorithms (2019) Oleksii Trekhleb,Sophia Shoemaker
*/