목차
개념
Stack은 자료 구조 중 하나로 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조 입니다.
Stack의 가장 큰 특징은 나중에 들어간 것이 먼저 나오는 후입선출(Last In Fist Out) 형태인 것 입니다.
이 방식을 가진 자료구조인 Stack을 이용해 다양한 문제를 해결할 수 있습니다.
특징
1. 먼저 들어간 자료가 나중에 나옵니다. LIFO (Last In Frist Out)
2. 시스템 해킹에서 버퍼오버플로우 취약점을 이용한 공격을 할 때 스택 메모리의 영역에서 합니다.
3. 인터럽트 처리, 수식의 계산, 서브루틴의 복귀 번지 저장 등에 사용됩니다.
4. 그래프의 깊이 우선 탐색(DFS)에 사용됩니다.
5. 재귀적(Recursion) 함수를 호출 할 때 사용합니다.
사용법
선언
import java.util.Stack;
Stack<Integer> stack1 = new Stack<>();
Stack<String> stack2 = new Stack<>();
값 추가 : push()
Stack<Integer> stack = new Stack<>();
stack.push(1);
Stack에 값을 추가하려면 push() 메소드를 사용합니다. 나중에 입력받은 데이터가 가장 위에 저장됩니다.
값 삭제 : pop()
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.pop(); // 가장 늦게 들어온 3이 나온다.
Stack에서 값을 제거하려면 pop() 메소드를 사용합니다. 가장 위쪽에 있는 Data가 반환되면서 Stack에서 제거됩니다.
값 전부 삭제(초기화) : clear()
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.clear();
상단의 값 조회 : peek()
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.peek(); // 가장 상단의 값인 2를 접근합니다.
Stack의 가장 위의 값을 접근하고 싶다면 peek() 메소드를 사용합니다.
크기 확인 : size()
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.size(); // stack에 데이터가 2개이므로 2가 출력됩니다.
Stack의 데이터의 수(크기)를 알고 싶으면 size() 메소드를 사용합니다.
비어있는지 확인 : empty()
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.empty(); // 비어있지 않기 때문에 false 출력, 비어있다면 true 출력
Stack에 데이터가 있는지 없는지를 확인하고 싶으면 empty() 메소드를 사용합니다. 비어있다면 true를 비어있지 않다면 false를 출력합니다.
요소가 포함되어있는지 확인 : contains()
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.contains(1); // 1은 포함되어 있기에 true 출력, 없는 요소를 넣으면 false 출력
Stack에 특정 데이터가 포함되어 있는지를 확인하고 싶으면 contains() 메소드를 사용합니다. 스택에 탐색하고 싶은 데이터가 있으면 true를 그렇지 않다면 false를 반환합니다.
참조 사이트
https://coding-factory.tistory.com/601
[Java] 자바 Stack 클래스 사용법 & 예제 총정리
Stack이란? 자료 구조 중 하나인 Stack의 사전적 정의는 '쌓다', '더미'입니다. 상자에 물건을 쌓아 올리듯이 데이터를 쌓는 자료 구조라고 할 수 있습니다. Stack의 가장 큰 특징은 나중에 들어간 것
coding-factory.tistory.com