01. Stack (스택)

  • LIFO(Last In, First Out), 후입선출
  • 가장 나중에 들어간 데이터가 제일 먼저 나오는 자료구조
  • 데이터를 입력할 때는 push
  • 데이터를 제거할 때는 pop

02. Class Stack 정의

    class Stack {
        // stack 생성자
        constructor() {
            this.array = {};
            this.idx = 0;
        }

        // stack의 사이즈
        // this.idx는 스택에 새롭게 추가될 아이템의 인덱스를 나타낸다
        size() {
            return this.idx;
        }

        // 가장 나중에 넣은 데이터를 확인 가능
        peek() {
            return this.array[this.idx - 1];
        }

        // stack에 아이템 추가
        push(item) {
            this.array[this.idx] = item;
            this.idx += 1;
        }

        // stack에서 item을 제거한 후 해당 item을 반환
        pop() {
            // size가 0이라면 return
            if (this.size() <= 0) {
                return;
            }

            const result = this.array[this.idx - 1];
            delete this.array[this.idx - 1];
            this.idx -= 1;

            return result;
        }
    }

03. 정의한 Stack 사용

    let stack = new Stack();
    stack.push(1); // array: [1], idx: 1
    stack.push(2); // array: [1, 2], idx: 2
    stack.push(3); // array: [1, 2, 3], idx: 3

    console.log(stack.pop()) // 3, idx: 2
    console.log(stack.pop()) // 2, idx: 1
    console.log(stack.pop()) // 1, idx: 0
    console.log(stack.pop()) // null

image 히히 잼따