Stack
- Stack은 LIFO(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;
}
}