Stack
: 데이터를 일시적으로 쌓아놓는 자료구조이다.
특징
- LIFO: 후입선출
- 단방향 구조
- 한 번에 데이터 한 개만 삽입, 삭제
- 스택이 비었을 때 pop() 또는 peek()를 호출할 시 EmptyStackException 발생
- DFS 등에서 사용
구성요소
- Element: 데이터 요소
- Top: 가장 최근에 들어온 데이터의 위치로 데이터의 추가, 삭제가 이뤄지는 지점
- Bottom: 가장 먼저 들어온 데이터의 위치로 스택의 가장 아래 지점
선언
- java.util.Stack 클래스에서 제공한다.
//ex Integer 형
Stack<Integer> stack = new Stack<>();
데이터 추가
- push();
- 값 추가 및 반환
- 스택 비어있을 시 EmptyStackException 반환
Stack<Integer> stack = new Stack<>();
stack.push(6);
데이터 제거
- pop();
- 가장 상단 값 반환 및 제거
- 스택 비어있을 시 EmptyStackException 반환
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.pop();// 2제거
stack.pop();// 1제거
다양한 메서드
메서드 | 설명 | 반환값 | 예시 |
peek() | 가장 상단 값 반환, 삭제x | 스택의 마지막 요소 - 스택 비어있을 시 EmptyStackException |
stack.peek(); |
empty() | 스택 비어있는지의 여부 반환 | - 빈 경우: true - 안 빈 경우: false |
stack.empty(); |
search() | 스택에 특정 데이터 존재 확인 | - 있음: pop 시 나오는 순서 반환 // 1부터 시작 - 없음: -1 반환 |
stack.search(obj); |
clear() | 스택 비우기 | stack.clear(); | |
size() | 스택의 크기 반환 | 스택의 크기 | stack.size(); |
EmptyStackException
- Stack이 비어있는 상태에서 pop() 또는 peek()를 호출하면 EmptyStackException이 발생한다.
Stack 클래스 사용 지양
이유
: Vector 클래스는 구현된지 오래된 클래스라 취약점이 많다.
Stack 클래스는 Vector 클래스를 상속받아 구현된 클래스로 부모 클래스가 취약점이 많은 문제에 따라
자식클래스인 Stack 클래스도 불안정해지는 문제가 발생한다.
예시
- Vector 클래스의 add()를 사용할 수 있어 Stack의 의도와 다르게 사용할 수 있는 문제가 발생한다.
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
stack.add(2, 6); //Vector 클래스의 add() 사용 가능 => 특정 인덱스에 6을 추가할 수 있게 됨
System.out.println(stack.pop()); //마지막에 넣은 값인 6이 아니라 5가 출력됨
'CS > DataStructure&Algorithm' 카테고리의 다른 글
구간 합 알고리즘 (0) | 2025.05.01 |
---|---|
선형구조 - 큐 (1) | 2025.04.30 |
검색 알고리즘 (0) | 2025.04.29 |
선형구조 - 연결 리스트 구현해보기 (1) | 2025.04.29 |
선형구조 - 순차 리스트 (1) | 2025.04.23 |