ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스택(Stack) 구현하기
    JavaScript 2022. 5. 19. 19:18

    스택(Stack) 이란?

    • 스택은 자료구조형에 속한다.
    • 먼저 들어간 자료가 나중에 나오는 후입선출 자료구조로, LIFO(Last In First Out)라고도 부른다.
    • 데이터를 입력하는 push()와 데이터를 제거하는 pop() 등의 작업을 할 수 있다.
    • ctrl+Z로 이전 작업을 취소하는 동작 등에서 사용된다.

    후입선출(LIFO) 과정

     

    Stack의 멤버변수

    c언어로 스택을 구현할 때는 구조체(struct)를 사용하면 되지만, 자바스크립트에서는 구조체가 없어 class로 새로운 객체를 만들어 사용해 보자!

    • size : 해당 스택의 max_size
    • top : 해당 스택의 데이터 높이
    • array : 데이터를 담을 배열
    constructor(size){
            this.size = size
            this.top = 0
            this.array = []
        }
    
    • size 를 생성자 인자로 받는다.

     

    Stack의 기능들

    stack을 구현하려면 총 3가지의 기능을 정의 해야 한다.

    JavaScript는 이미 이 기능들을 모두 배열의 내장함수로 가지고 있다!

    • pop() : 스택에서 가장 최근에 들어온 데이터를 방출하고 그 데이터를 return 하는 함수로 stack의 top이 0인데 pop인 경우 에러를 호출
    • push() : 스택의 마지막에 데이터를 입력 하는 함수로 size보다 높다면 에러를 호출
    • peek() : 스택의 마지막 데이터를 return 하는 함수
        pop(){
            let temp = this.array[this.top]
            this.top--
            return temp
        }
    
        push(item){
            if(this.size > this.top){
                this.top++
                return this.array[this.top] = item
            }else{
                console.log(new Error("stack is full"))
            }
        }
        
        peek(){
            return this.array[this.top]
        }
    

     

    스택 구현하기

    • 해당 클래스는 변수에 할당한 후 array.push() 로 사용하기 때문에 프로퍼티에 직접 영향을 미칠 수 있는 큰 단점이 있다.
    • 그래서 캡슐화를 통해 멤버변수를 setting 하지 못하게 했다.
      • 캡슐화를 하는 가장 큰 이유는 정보은닉 때문이다!
      • 정보은닉이란 객체에 대한 구체적인 정보를 노출시키지 않도록 하기 위한 기법이다.
    function Stack(max_size){
        
        const size = max_size
        let top = 0
        let array = []
        
        return{
            pop(){
                 if(top==0){
                    console.log("stack is empty")
                }else{
                    let temp = array[top]
                    top--
                    return temp
                }
            },
        
            push(item){
                if(size > top){
                    top++
                    return array[top] = item
                }else{
                    console.log(new Error("stack is full"))
                }
            },
            peek(){
                return array[top]
            }
        }
    }
    
    let a = Stack(5)
    a.push(1)
    a.push(2)
    a.push(3)
    a.push(4)
    a.push(5)
    console.log(a.pop()) // 5
    console.log(a.peek()) // 4
    
    반응형

    'JavaScript' 카테고리의 다른 글

    Object Method  (0) 2022.05.24
    Object (객체)  (0) 2022.05.24
    String Method  (0) 2022.05.13
    제어문 (조건문, 반복문, 분기문)  (0) 2022.05.13
    논리 연산자  (0) 2022.02.21

    댓글

Designed by Tistory.