자료구조

Stack - Java

Stitchhhh 2025. 4. 28. 19:34

Stack

  • StackLIFO(Last In First Out, 후입선출) 방식으로 동작하는 자료구조입니다.
  • Java에서는 java.util.Stack 클래스를 통해 제공되며, 기본적으로 Vector를 상속받아 구현되어 있습니다.

주요 특징

자료구조 내부적으로 Vector(배열 기반) 사용
크기 조정 요소 추가 시 내부 배열을 동적으로 확장 (필요 시)
접근 속도 top 요소 접근은 빠름 (O(1))
삽입/삭제 속도 top에 대한 push/pop은 빠름 (O(1))
중복 허용 O (같은 값을 여러 번 저장 가능)
null 허용 O (null 값 저장 가능)

대표 메서드

package structure.stack;

import java.util.Stack;

public class StackClass {

    private final Stack<Integer> stack;

    public StackClass(Stack<Integer> stack) {
        this.stack = stack;
    }

    // 스택의 top에 값을 추가합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - stack이 null인 경우
    public Stack<Integer> push(int value) {
        this.stack.push(value);
        return this.stack;
    }

    // 스택의 top 요소를 제거하고 반환합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: EmptyStackException - 스택이 비어 있는 경우
    // 예외 발생: NullPointerException - stack이 null인 경우
    public int pop() {
        return this.stack.pop();
    }

    // 스택의 top 요소를 반환합니다(제거하지 않음).
    // 시간 복잡도: O(1)
    // 예외 발생: EmptyStackException - 스택이 비어 있는 경우
    // 예외 발생: NullPointerException - stack이 null인 경우
    public int peek() {
        return this.stack.peek();
    }

    // 스택의 모든 요소를 제거합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - stack이 null인 경우
    public void clear() {
        this.stack.clear();
    }

    // 스택이 비어 있는지 확인합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - stack이 null인 경우
    public boolean empty() {
        return this.stack.empty();
    }

    // 스택의 요소 개수를 반환합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: NullPointerException - stack이 null인 경우
    public int size() {
        return this.stack.size();
    }

    // 지정된 인덱스의 요소를 반환합니다.
    // 시간 복잡도: O(1)
    // 예외 발생: ArrayIndexOutOfBoundsException - 인덱스가 스택 범위를 벗어난 경우
    // 예외 발생: NullPointerException - stack이 null인 경우
    public int get(int index) {
        return this.stack.get(index);
    }

    // 스택에 지정된 값이 포함되어 있는지 확인합니다.
    // 시간 복잡도: O(n)
    // 예외 발생: NullPointerException - stack이 null인 경우
    public boolean contains(int value) {
        return this.stack.contains(value);
    }

    // 스택에서 지정된 값의 첫 번째 인덱스를 반환합니다.
    // 시간 복잡도: O(n)
    // 예외 발생: NullPointerException - stack이 null인 경우
    public int indexOf(int value) {
        return this.stack.indexOf(value);
    }

    // 스택에서 지정된 인덱스의 요소를 제거합니다.
    // 시간 복잡도: O(n)
    // 예외 발생: ArrayIndexOutOfBoundsException - 인덱스가 스택 범위를 벗어난 경우
    // 예외 발생: NullPointerException - stack이 null인 경우
    public Stack<Integer> removeOfIndex(int index) {
        this.stack.remove(index);
        return this.stack;
    }

    // 스택에서 지정된 값의 첫 번째 발생을 제거합니다.
    // 시간 복잡도: O(n) (값을 찾기 위해 스택을 순차적으로 검색)
    // 예외 발생: NullPointerException - stack이 null인 경우
    public Stack<Integer> removeOfValue(Integer value) {
        this.stack.remove(value);
        return this.stack;
    }
}

'자료구조' 카테고리의 다른 글

Deque - Java  (0) 2025.04.28
Queue - Java  (0) 2025.04.28
LinkedList - Java  (8) 2025.04.27
ArrayList - Java  (0) 2025.04.27
자료구조 정의  (0) 2025.04.27