Post

Java Stack

1. Stack

스택(Stack)의 사전적 정의는 ‘쌓다’, ‘더미’로서 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료구조이다.

스택은 가장 나중에 들어온 데이터가 가장 먼저 빠져나가는 후입선출(LIFO : Last In First Out) 구조로 되어 있어, 데이터가 입력된 순서대로 처리되는 것이 아니라 나중에 들어온 데이터를 먼저 처리할 때 사용한다.

stack

2. 선언

1
2
3
4
5
6
7
8
9
10
11
12
import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        // Integer 스택 선언
        Stack<Integer> intStk = new Stack<>();
        // String 스택 선언
        Stack<String> strStk = new Stack<>();
        // Boolean 스택 선언
        Stack<Boolean> bolStk = new Stack<>();
    }
}

3. 메서드

1) push()

데이터를 스택에 추가하고 해당 값을 반환한다.

1
2
3
4
5
6
7
8
9
10
11
12
import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> intStk = new Stack<>();
        intStk.push(1);
        intStk.push(2);
        intStk.push(3);

        System.out.println(intStk);
    }
}

2) pop()

스택의 마지막 요소를 제거하고 해당 값을 반환한다.

1
2
3
4
5
6
7
8
9
10
11
12
import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> intStk = new Stack<>();
        intStk.push(1);
        intStk.push(2);
        intStk.push(3);

        System.out.println(intStk.pop());
    }
}

3) peek()

스택의 마지막 요소를 반환하며, 스택에는 변화를 주지 않는다. 스택이 비어있을 경우 NoSuchElementException이 발생한다.

1
2
3
4
5
6
7
8
9
10
11
12
import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> intStk = new Stack<>();
        intStk.push(1);
        intStk.push(2);
        intStk.push(3);

        System.out.println(intStk.peek());
    }
}

4) empty()

스택이 비어있는지 여부를 반환한다. 비어있는 경우 true, 비어있지 않는 경우 false를 반환한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> intStk = new Stack<>();

        System.out.println(intStk.isEmpty());
        intStk.push(1);
        intStk.push(2);
        intStk.push(3);

        System.out.println(intStk.isEmpty());
    }
}

메서드의 인자를 스택에서 검색하여 해당 위치를 반환한다. 만약 해당 인자가 여러 개일 경우, 마지막 위치를 반환한다.

위치는 인덱스가 아닌 빠져나오는 순서이다. 찾는 값이 스택에 없을 경우 -1을 반환한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> intStk = new Stack<>();

        intStk.push(1);
        intStk.push(2);
        intStk.push(3);

        System.out.println(intStk.search(2));
        System.out.println(intStk.search(1));
        System.out.println(intStk.search(4));
    }
}

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.