스택이란?

스택(stack)은 데이터를 일시적으로 쌓아 놓는 자료구조로, 데이터의 입력과 출력순서는

후입선출(LIFO : Last In First Out)입니다. 즉 가장 나중에 넣은 데이터를 가장 먼저 꺼냅니다.

스택에 데이터를 넣는 작업을 푸시(push)라 하고, 스택에서 데이터를 꺼내는 작업을 팝(pop)이라고 합니다. 스택에 데이터를 푸시하고 팝하는 과정은 테이블 위에 접시를 겹겹이 쌓는 것처럼 데이터를 넣고 꺼내는 작업을 위쪽부터 수행합니다. 이렇게 푸시와 팝이 이루어지는 쪽을 꼭대기(top)이라 하고, 그 반대쪽은 스택의 가장 아랫부분을 바닥(bottom)이라고 합니다.

화면 캡처 2024-09-16 152648.png

※푸시와 팝의 예

image.png


스택 만들기

스택을 구현하는 프로그램을 만들어 보겠습니다 .기본 구조를 익히기 위해 스택을 생헝할 때 용량(스택에 쌓을 수 있는 최대 데이터 수)을 결정하는 고정 길이 스택을 만들겠습니다. 여기서 스택에 저장하는 값은 int형 입니다.


※정수형 스택과 예외 생성

IntStack.java

//int형 고정길이 스택

public class IntStack {
    private int[] stk; //스택용 배열
    private int capacity; // 스택 용량
    private int ptr; //스택 포인터

    //실행 시 예외: 스택이 비어 있음
    public class EmptyIntStackException extends RuntimeException {
        public EmptyIntStackException{}
    }

    //실행 시 예외: 스택이 가득 참
    public class OverFlowIntStackException extends RuntimeException {
        public OverFlowIntStackException{}
    }

    //생성자

    public IntStack(int maxLen) {
        ptr = 0;
        capacity = maxLen;
        try {
            stk = new int[capacity];
        } catch (OutOfMemoryError e) {
            e.printStackTrace();
            capacity = 0;
        }
    }
}

클래스 IntStack에서 실행할 때 예외는 EmptyIntStackException과 OverflowStackException의 두가지입니다. 이 예외는 push, popm peek 메서드에서 사용됩니다.

<스택용 배열 stk>