스택(Stack) : '쌓다', '쌓이다'와 같은 뜻으로, 접시를 높이 쌓아 놓은 형태와 비슷하며, 데이터를 순서대로 쌓는 자료구조이다.
후입선출(LIFO: Last In First Out
: 먼저 들어온 데이터가 나중에 빠져나가는 구조단방향 입출력 구조
: 데이터의 들어오는 방향과 나가는 방향이 같다.깊이 우선 탐색(DFS)
에 이용된다.Stack 객체를 생성할 땐 Stack<Type> 이름 = new Stack<>();
의 형태로 생성할 수 있고, 데이터 타입은 클래스나 래퍼 클래스로 선언할 수 있다.
import java.util.Stack;
// Integer형 스택 선언
Stack<Integer> stackInt = new Stack<>();
// String형 스택 선언
Stack<String> stackStr = new Stack<>();
// Boolean형 스택 선언
Stack<Boolean> stackBool = new Stack<>();
push(Object obj)
메소드를 통해 값을 하나씩 추가할 수 있다.// Integer형 스택 선언
Stack<Integer> stackInt = new Stack<>();
// 값 추가 - push()
// 1, 2, 3 순으로 값 추가
stackInt.push(1); // 1 추가
stackInt.push(2); // 2 추가
stackInt.push(3); // 3 추가
pop()
메소드를 사용해 하나씩 뺄 수 있으며, 가장 위쪽에 있는 원소의 값이 제거된다.clear()
메소드를 사용해 스택을 초기화할 수 있다.// Integer형 스택 선언
Stack<Integer> stackInt = new Stack<>();
// 값 추가 - push()
// 1, 2, 3 순으로 값 추가
stackInt.push(1); // 1 추가
stackInt.push(2); // 2 추가
stackInt.push(3); // 3 추가
// 값 제거 - pop()
// 3, 2 순으로 값 제거
stackInt.pop(); // 3 제거
stackInt.pop(); // 2 제거
// Stack 초기화 - claer()
stackInt.clear();
peak()
: 스택의 가장 위에 있는 값을 출력한다.size()
: 스택의 크기를 출력해준다.empty()
: 스택이 비어있는지 확인해 true/false
를 리턴해준다.contains(Object obj)
: 스택에 해당 값이 있는지 확인해 true/false
를 리턴해준다.search(Object obj)
: 스택에 해당 값이 있는지 확인해 인덱스가 아닌 순서를 반환하고 존재하지 않다면 -1을 호출한다. pop()
메소드를 호출했을 때 몇 번째 순서에 나오는 지에 대한 인덱스를 반환한다. 따라서 반환 값은 0부터가 아닌 1부터 시작된다.Stack<String> stack = new Stack<>();
stack.push("A");
stack.push("B");
stack.push("C");
stack.push("D");
stack.peek(); // stack의 가장 상단의 값 D 출력
stack.size(); // stack의 크기 출력 : 4
stack.empty(); // stack이 비어있는제 check (비어있다면 true)
stack.contains(1) // stack에 1이 있는지 check (있다면 true)
stack.search("B") // "B"가 나올 순서인 3이 출력