"스택을 쌓는다" 라는 표현을 실생활에서도 간간히 사용하기 때문에,
큐와는 다르게 그나마 기억하기가 편한 것 같습니다.
자료구조의 일종으로서 큐(Queue)와는 다르게 후입선출의 형식입니다. - LIFO(Last In First Out)
나중에 들어오는 값이 가장 먼저 나가는 것으로,
큐와는 다르게 Index의 개념이 존재합니다.
큐보다 실생활에 적용, 비유되는 부분이 많습니다.
쓰레기통...바구니...벽돌쌓기...등등
쌓아간다는 개념의 모든 것들은 스텍으로 연관 지을 수 있는 것 같네요.
(우리의 지식과도 같은 모양새가 아닐까...)
깊이우선탐색(DFS)에서 사용되기도 하며, 재귀함수에도 많이 사용됩니다.
이 그림과 같이 파란색 순서로 들어와 빨간색 순서로 나갑니다.
Stack<Integer> stack = new Stack<Integer>();
Stack<객체> 변수명 = new Stack<객체>();
큐와는 달리 Stack만을 Import하여 사용합니다.
stack.pust(i);
stack.add(i);
add의 경우 true를 return하고,
push는 push한 item을 return합니다.
상황에 따라 다르게 사용할 수 있겠지만, 가시적으로도 Stack을 사용한 것을 명시하기 위해
push를 쓰는 것이 더 명확할 것 같습니다.
하지만, add의 경우 index를 주어 특정 위치에 끼워넣는 것이 가능하기 때문에,
요건에 따라 필요에 의해 사용할 수 있습니다.
stack.peek();
Stack변수.peek();
이렇게 사용할 경우 현재 Stack의 가장 마지막에 들어간 값, 가장 먼저 출력될 값이 출력되게 됩니다.
큐와 동일하게 Stack이 비어있을 경우 null을 return하기 때문에, 조건식에서도 사용됩니다.
stack.pop();
stack.clear();
stack.remove(i);
clear - Stack을 전체 비움
pop - 튀어나온다는 영어해석처럼 가장 먼저 출력할 대상을 삭제하며, 출력합니다.
= 가장 나중에 넣은 값, 가장 끝의 index
remove - remove는 index를 주지 않을 경우 pop과 동일하게 가장 먼저 출력할 대상을 삭제하고,
파라미터로 index를 줄 경우 해당 index에 해당하는 값을 삭제합니다.(해당 값 출력X)
Stack변수.contains(변수); = 해당 변수가 Stack 안에 존재하는 지 검증
Stack변수.empty(); = Stack이 비어있는지 검
Stack변수.firstElement; = 가장 첫번째 index의 값을 출력
Stack변수.indexOf(변수); = 파라미터로 넣은 값의 index를 출력합니다.
Stack변수.get(index); = 파라미터 index에 해당하는 값을 출력합니다.
위의 모든 예제를 활용하여 만든 예제입니다. 최대한 다양하게 사용해보았습니다...
import java.io.IOException;
import java.util.Stack;
public class Main{
public static void main(String[] args) throws IOException{
Stack<Integer> stack = new Stack<Integer>();
for(int i = 1; i <= 5; i++) {
stack.push(i);
}
if(stack.peek() == 5) {
System.out.println(stack.firstElement());
}
System.out.println(stack.get(0));
System.out.println(stack);
System.out.println("--------------------------------------------------");
System.out.println(stack.pop());
System.out.println(stack);
stack.push(stack.pop());
System.out.println("--------------------------------------------------");
System.out.println(stack);
stack.remove(0);
stack.add(0, stack.pop());
System.out.println("--------------------------------------------------");
System.out.println(stack);
}
}