본문 바로가기
it/javascript

자료구조 - 스택 with javascript

by 기공준 2021. 3. 29.
반응형

안녕하세요 기공준입니다.

이번 글에서는 스택에 대해서 간단하게 알아보고 

javascript를 이용해서 스택을 구현해보겠습니다.

 

스택은 목록의 끝에서만 접근할 수 있는 나열 구조입니다.

스택은 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형구조(LIFO - Last In First Out)로 되어 있습니다.

자료를 밀어 넣는 것을 push라 하고 반대로 넣어둔 자료를 꺼내는 것을 pop이라고 합니다.

이때 꺼내지는 자료는 가장 최근에 push 한 자료부터 나오게 됩니다.

이처럼 나중에 넣은 값이 먼저 나오는 것을 LIFO(Last In First Out) 구조라고 합니다.

 

연산

top() : 스택의 가장 윗 데이터를 반환. 스택이 비었다면 연산 정의 불가

pop(): 스택의 가장 윗 데이터를 삭제한다. 스택이 비었다면 연산 정의 불가

push(): 스택의 가장 윗 데이터로 메모리 생성

empty(): 스택이 비었다면 1 반환, 그렇지 않다면 0 반환

 

위에 적은 개념을 바탕으로 javascript로 스택을 구현해보았습니다.

 

const stack = () =>{
    let arr;
    let top;
    
    return {
        _constructor : (size) => {
            arr = new Array(size);
            top = -1;
        },
        top : () => {
            if(top<0)   console.log('stack is empty');
            return arr[top];
        },
        pop : () => {
            if(top<0)   console.log('stack downflow');
            else {
                delete arr[top];
                top--;
            }
        },
        push : (value) => {
           if(top>=arr.length-1)    console.log('stack overflow');
           else {
               top++;
               arr[top]=value;
           }
        },
        empty : () => {
            for(let values in arr){
                if(values){
                    return false;
                }
            }
            return true;
        },
        printStack : () => {
            console.log('===============\n');
            for(let i=top;i>=0;i--){
                console.log(`${arr[i]} \n`);
            }
            console.log('===============\n');
        }
    }
};

let stackOne = stack();
stackOne._constructor(5);
stackOne.push(1);
stackOne.push(5);
stackOne.pop();
console.log(stackOne.top());
console.log(stackOne.empty());
stackOne.push(3);
stackOne.printStack();
반응형

댓글