Language/Java
Stack
m5n
2024. 5. 20. 22:10
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에 1 추가
stack.push(2); // stack에 2 추가
stack.push(3); // stack에 3 추가
Stack 값 삭제
Stack<Integer> stack = new Stack<>();
stack.pop(); // stack의 맨 위 값 삭제
Stack 가장 상단 값 출력
Stack<Integer> stack = new Stack<>();
stack.peek(); // stack의 가장 상단 값 출력
Stack 기타 메서드
Stack<Integer> stack = new Stack<>();
stack.size(); // stack의 크기 출력
stack.empty(); // stack이 비어있는지 확인 (비어있다면 true를 반환)
stack.contains(1); // stack에 1이 있는지 확인 (있다면 true를 반환)
stack.clear(); // stack에 들어있는 모든 값 초기화
stack.search(2); // 2(value)의 인덱스 값 반환