아무거나

stack 구현 본문

Java/Java

stack 구현

전봉근 2019. 6. 26. 14:57
반응형

[자바로 스택(stack) 구현]

* 스택은 먼저 들어간것이 먼저 나온다.

- 스택오버플로우란 스택이 꽉찼을때 아이템을 push하려고 하는 행위(더 이상 데이터가 들어갈 자리가 없을때)

- 스택언더플로우란 스택안에 데이터가 하나도없을때 pop을 하려고하는 경우라한다.

 

1. 스택 오버플로우 / 언더플로우 예제

[예제]

package test;



public class NumStack {

    private int[] arr; // stack

    private int top = 0; // index(arr index)



    public NumStack(int stackSize) {

        this.arr = new int[stackSize];

    }



    public static void main(String[] args) {

        // case 1: 1,2,3이 push된걸 출력

        // case 2: 4가 들어갈땐 스택사이즈가 3이므로 4는 안들어가므로 stackoverflow 발생 출력

        // case 3: pop을 두번실행 했으므로 기존 3까지 들어간 상황에서 3, 2를 뺴줬으므로 결과가 3, 2로 출력된걸 볼 수 있다.

        NumStack st = new NumStack(3);

        st.push(1);

        st.push(2);

        st.push(3);

        st.push(4);

        System.out.println(st.pop());

        System.out.println(st.pop());

    }



    private void push(int i) {

        if(top < arr.length) {

            arr[top++] = i;  // 배열에 먼저 넣어주고 top이 올라간다.

            System.out.println("pushed: "+i);

        } else {

            System.out.println("stack is full");

        }

    }



    private int pop() {

        if(top > 0) {

            return arr[--top];

        } else {

            // top 0일때

            throw new java.util.NoSuchElementException();

        }

    }

}

 

2. 실제로 스택은 어떻게 사용되는가?

   - browser back button을 볼 수 있다.

     예를들어, 브라우저에서 구글을 접속하고 유투브에 들어가서 어떤 동영상을 보려고 들어갔을때

     google -> youtube home -> video 순으로 스택이 쌓이게 된다. 그 다음 만약 뒤로가기 버튼을 클릭했을 경우

     유투브 홈으로 이동하게 된다. 또 뒤로가기를 클릭하면 구글홈페이지를 보여주게 된다.

     이유는 스택은 LIFO - Last in First out (후입선출) 이기 때문이다. (나중에 들어온것이 먼저 나간다.)

반응형
Comments