front-end/JavaScript, TypeScript

타입스크립트로 stack 구현하기

hojung 2021. 7. 28.
728x90
반응형
{
    //Linked list 기반 stack
    interface stack{
        readonly size : number;
        push(value : string) : void;
        pop() : string;
    }

    type node = {
        nextNode? : node;
        prevNode? : node;
        str : string;
    }

    class Stack implements stack
    {
        private Head? : node;
        private Tail? : node;
        private size1 : number = 0; // getter와 이름이 겹치면 안됨 
        get size()
        {
            return this.size1;
        }
            
        
        push(str : string)
        {
            const temp : node = {str};
            if(this.size1 === 0)
            {
                this.Head  = temp;
                this.Tail = temp;
                this.size1++;
            }

            else
            {
                temp.prevNode = this.Head;
                this.Head = temp;
                this.size1++;
            }
        }

        pop() : string
        {
            if(!this.Head) // undefined인 경우를 생각해주면 됨
            {
                return ('no node in stack');
            }   

            else 
            {
                const popstr  = this.Head.str;
                const newHead = this.Head.prevNode;
                this.Head = newHead;
                this.size1 --;
                console.log(popstr);
                return popstr;
            }
        }
    }

    const sck = new Stack;

    sck.push('심');
    sck.push('이');
    sck.push('정');
    sck.pop();
    sck.push('박');
    sck.pop();
    console.log(sck);

    
}

자료구조 중에 하나인 stack을 타입스크립트로 구현해보았다. stack이라는 자료구조 형태는 LIFO구조를 가지고 있다. 

(Last In First Out)이라는 뜻으로 들어갈 때는 순차적으로 쌓이게 되고 자료를 꺼낼 때는 반대의 순서를 가지게 되는 구조이다. 

 

Stack에는 처음과 끝을 알아야하므로 Head와 Tail이라는 속성을 부여하고 next 와 prev라는 속성을 통해 삭제와 추가를 수행한다. 

 

타입스크립트에서는 그 이름에서도 알 수 있듯이 자료형 타입에 민감하기 때문에 ?와 같은 undefined 타입을 설정해줄 때 조건문에서 모든 타입의 경우의 수를 설정해 주어야한다. 따라서 pop() api를 구현할 때 조건문에 !this.Head조건을 사용한 것은 Head라는 속성이 ?라는 연산자로 undefined와 node라는 두 가지의 타입을 모두 가질 수 있으므로 만약 Head가 undefined일 때의 조건을 추가해 주어 명확하게 해주어야한다. 

 

위와 같은 코드로 터미널에 돌려보면 다음과 같은 결과가 나온다.

결과

 

728x90
반응형

댓글