이번 포스팅에서 알아볼 내용은
Stack의 정의와
Java Stack Class 사용 예제를 알아보겠습니다.
Stack 이란? ( 쌓다, 적재 )
후입 선출 ( Last In First Out : LIFO ) 특성을 가지는 자료구조( Data Stucture )라고 말합니다.
입력 연산은 Push( 푸시 ), 출력 연산은 Pop( 팝 ), 조회 연산은 Peek( 픽 )이라고 부릅니다.
조회 연산시 데이터를 조회만 할 뿐, 순번( Index )은 변화시키지 않는 연산을 의미합니다.
( 선입선출 (First In First Out : FIFO)인 Queue와 비교되는 개념입니다. )
우리가 흔히 알고 있는 Undo( Ctrl + z ) 영역이 바로 Stack입니다.
가장 최근에 실행한 명령어를 취소해야하기 때문에 마지막에 들어간 자료가 먼저 나오는 구조가 효율적입니다.
Stack은 보통 크기를 고정하여 사용하기 때문에 크기를 다 사용하게 되면 넘치게 됩니다.
이에 대한 대처방안이 없으면 다른 메모리 영역을 침범할 수 있게 됩니다.
이런 현상을 이용해 해킹하는 방법이 StackOverflow입니다.
Stack이라는 Data Structure는 프로세스( Process )를 구성하는 4개의 요소 중 하나이며, 함수의 호출에도 관여합니다.
Java Stack Class Method
Stack<Integer> stack = new Stack();
int temp = 1;
// stack의 가장 위에 temp를 추가
stack.push(temp);
// return 1
stack.peek();
// return false
stack.isEmpty();
// Stack의 가장 윗 부분에 있는 요소를 제거
stack.pop();
- pop() : Stack에서 가장 위에 있는 항목을 제거합니다.
- push(Element) : Element를 Stack의 가장 윗부분에 추가합니다.
- peek() : Stack에서 가장 위에 있는 Element를 반환합니다.
- isEmpty() : Stack이 비어 있을 때에 true를 반환합니다.
- size() : Stack의 크기를 출력합니다.
- contains( Element ) : Stack에 Element가 있는지 여부를 반환합니다. 있으면 true
Stack Class의 특징
Stack은 상황에 따라 Array보다 Stack에 Data를 저장하는 것이 적합할 때가 있습니다.
Array와는 다르게 Stack은 i번째 항목에 접근할 수 없습니다.
Stack의 사용 사례
- 재귀 알고리즘 혹은 재귀적 함수를 호출할 때 사용
- 브라우저의 뒤로 가기
- 실행 취소
- 역순 문자열 만들기
- 수식의 괄호 검사 ( 올바른 괄호 문자열 판단하기 )
- 후위 표기법 계산
- 그래프의 깊이 우선 탐색( DFS )에서 사용
이번 포스팅에서는 자료구조 Stack에 대해 알아보았습니다.
'Algorithm > Linear' 카테고리의 다른 글
[Linear] Javascript로 Stack과 Queue 구현하기 (0) | 2022.02.19 |
---|---|
Queue란? Java Queue Class에 대해 알아보자! (0) | 2022.01.19 |