스택(Stack)?
스택은 선형자료구조이다.
스택은 가장 마지막에 저장된 데이터가 가장 빠져나가는 LIFO(Last In First Out) 구조이다.
스택의 특징
- 후입선출 LIFO(Last In First Out) 구조 : 가장 늦게 들어온 데이터가 먼저 빠져나가는 구조
- 단방향 입출력 구조 : 데이터의 들어오는 방향과 나가는 방향이 같다.
- top 위치의 데이터만 접근 가능하기 때문에, 탐색하려면 모든 데이터를 꺼내야 한다.
스택의 선언
스택 선언할 때, 데이터 타입은 클래스 또는 래퍼 클래스로 선언할 수 있다.
import java.util.Stack;
class StackEx {
public static void main(String[] args) {
Stack<Integer> stackInt = new Stack<>();
Stack<String> stackString = new Stack<>();
Stack<Character> stackCha = new Stack<>();
}
}
스택에 값 추가, 제거
push() : 스택에 값을 하나씩 추가한다.
pop() : 스택의 마지막 요소를 제거함과 동시에 해당 값을 반환한다.
import java.util.Stack;
class StackEx {
public static void main(String[] args) {
Stack<Integer> stackInt = new Stack<>();
// 스택에 추가, 제거
stackInt.push(1); // 추가
stackInt.pop(); // 제거 및 반환, 스택 변화 O
}
}
스택에 마지막 값 확인
peek() : 스택의 마지막 값을 반환하며, 스택에는 변화를 주지 않는다.
만약, 스택이 비어있을 경우 peek() 메서드 호출 시 NoSuchElementException 예외가 발생한다.
import java.util.Stack;
class StackEx {
public static void main(String[] args) {
Stack<Integer> stackInt = new Stack<>();
// 가장 먼저 사용될 요소 반환
stackInt.peek(); // NoSuchElementException 예외 발생
stackInt.push(1);
stackInt.peek(); // 1
}
}
스택이 비어있는지 확인
isEmpty() : 스택이 비어있는지의 여부를 확인한다.
비어있을 경우 true, 비어있지 않을 경우 false를 반환한다.
import java.util.Stack;
class StackEx {
public static void main(String[] args) {
Stack<Integer> stackInt = new Stack<>();
// 빈 여부 반환
stackInt.isEmpty(); // true
stackInt.push(1);
stackInt.isEmpty(); // false
}
}