[java] 자바 스택 구현시 배열 사용하기

스택은 데이터를 일시적으로 저장하는 자료구조로, 후입선출(LIFO) 방식으로 동작합니다. 자바에서 스택을 구현할 때 배열을 사용할 수 있습니다. 이번 글에서는 자바 배열을 이용하여 스택을 구현하는 방법에 대해 알아보겠습니다.

배열을 이용한 스택 구현 방법

public class Stack {
    private int[] array;  // 스택을 저장할 배열
    private int top;      // 스택의 가장 상단 위치

    // 스택 생성자
    public Stack(int size) {
        array = new int[size];
        top = -1;  // 스택이 비어있음을 나타내기 위해 -1로 초기화
    }

    // 스택이 비어있는지 확인하는 메소드
    public boolean isEmpty() {
        return top == -1;
    }

    // 스택이 가득 차 있는지 확인하는 메소드
    public boolean isFull() {
        return top == array.length - 1;
    }

    // 스택에 데이터를 추가하는 메소드
    public void push(int data) {
        if (isFull()) {
            System.out.println("스택이 가득 찼습니다.");
        } else {
            array[++top] = data;
            System.out.println(data + "를 스택에 추가했습니다.");
        }
    }

    // 스택에서 데이터를 꺼내는 메소드
    public int pop() {
        if (isEmpty()) {
            System.out.println("스택이 비어있습니다.");
            return -1;
        } else {
            int data = array[top--];
            System.out.println(data + "를 스택에서 꺼냈습니다.");
            return data;
        }
    }

    // 스택의 가장 상단에 있는 데이터를 확인하는 메소드
    public int peek() {
        if (isEmpty()) {
            System.out.println("스택이 비어있습니다.");
            return -1;
        } else {
            System.out.println("스택의 가장 상단 데이터는 " + array[top] + "입니다.");
            return array[top];
        }
    }

    // 스택의 모든 데이터를 출력하는 메소드
    public void printStack() {
        if (isEmpty()) {
            System.out.println("스택이 비어있습니다.");
        } else {
            System.out.println("스택의 모든 데이터를 출력합니다:");
            for (int i = top; i >= 0; i--) {
                System.out.println(array[i]);
            }
        }
    }
}

스택 사용 예시

public class Main {
    public static void main(String[] args) {
        Stack stack = new Stack(5);

        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);

        stack.printStack();

        stack.pop();
        stack.pop();

        stack.printStack();
    }
}

위의 예시 코드에서는 크기가 5인 스택을 생성하고, 1부터 5까지의 데이터를 순차적으로 스택에 추가한 후, pop 연산을 수행한 결과를 출력합니다. 2개의 데이터를 pop 연산한 후에는 데이터 3, 2, 1이 스택에 남아있음을 확인할 수 있습니다.

이렇게 배열을 이용하여 자바에서 스택을 구현할 수 있습니다. 스택은 데이터를 임시로 저장하거나 역추적이 필요한 상황에서 유용한 자료구조이므로, 응용 프로그램에서 활용할 수 있는 다양한 경우가 있습니다.

참고 자료