Stack❓
- Stack은
후입선출(Last-In-First-Out; LIFO)의 대표적인 선형 자료구조 중의 하나
- 후입선출이란
Last-In-First-Out 이라는 뜻 그대로 나중에 들어온 데이터가 가장 먼저 나간다 의 의미
- 프로그래밍에서 데이터가 입력된 순서대로 처리되는 것이 아닌,
가장 나중에 들어온 데이터를 먼저 처리할 때 사용
Stack의 특징
- 먼저 들어간 자료가 나중에 나옴 LIFO(Last In First Out) 구조
- 시스템 해킹에서 버퍼오버플로우 취약점을 이용한 공격을 할 때 스택 메모리의 영역에서 함
- 인터럽트 처리, 수식의 계산, 서브루틴의 복귀 번지 저장 등에 쓰임
- 재귀(Recursion) 함수를 호출 할 때 사용
- 그래프의 깊이 우선 탐색(DFS)에서 사용

시간복잡도
| 연산 | 평균 소모 시간 | 최악 소모 시간 |
|---|
| Acess | O(n) | O(n) |
| Search | O(n) | O(n) |
| Push | O(1) | O(1) |
| Pop | O(1) | O(1) |
- Stack에서의 삽입 삭제는
O(1)의 시간 복잡도를 가짐
-> 삽입, 삭제는 항상 Stack의 top에서 일어나기 때문
Stack 사용법
Stack 선언
import java.util.Stack
Stack<Integer> stack = new Stack<>();
Stack 값 추가
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
Stack 값 삭제
Stack<Integer> stack = new Stack<>();
stack.pop();
Stack 가장 상단 값 출력
Stack<Integer> stack = new Stack<>();
stack.peek();
Stack 기타 메서드
Stack<Integer> stack = new Stack<>();
stack.size();
stack.empty();
stack.contains(1);
stack.clear();
stack.search(2);