데이터를 일시적으로 저장하기 위해 사용하는 자료구조이다. 데이터의 입력과 출력 순서는 후입선출(LIFO : Last In First Out)이다. 차곡 차곡 쌓여진 더미를 의미한다고 생각하면 된다.!

객체는 n개의 요소(element)들의 선형리스트라 한다.
| 연산 | 기능 |
|---|---|
| init() | 스택을 초기화 |
| create() | 스택을 생성 |
| is_empty() | 스택이 비어있는지 검사 |
| is_full() | 스택이 가득 찼는지 검사 |
| push(e) | 스택의 맨 위에 요소 e 추가 |
| pop(s) | 스택의 맨 위 요소를 삭제 |
| peek(s) | 스택의 맨 위 요소를 삭제하지 않고 반환 |
| 연산 | 기능 |
|---|---|
| top() | 스택 맨 위에 있는 데이터 값 반환 |
| push() | 스택에 데이터 삽입 |
| pop() | 스택에서 데이터 삭제하여 반환 |
| isempty() | 스택에 원소가 없으면 true, 있으면 false 반환 |
| isfull() | 스택에 원소가 없으면 false, 있으면 true 반환 |

| 연산 | 시간복잡도 |
|---|---|
| 삽입(push) | O(1) : 맨 위에 데이터를 넣으면 되기 때문 |
| 삭제(pop) | O(1) : 맨 위에 데이터를 삭제하면 되기 때문 |
| 읽기(peek) | O(1) : 맨 위의 데이터를 읽으면 되기 때문 |
| 탐색(search) | O(n) : 맨 위의 데이터부터 하나씩 찾아야 되기 때문 |
import java.util.Stack; //import
Stack<Integer> stack = new Stack<>(); //int형 스택 선언
Stack<String> stack = new Stack<>(); //string형 스택 선언
Stack<Charcter> stack = new Stack<>(); //char형 스택 선언
Stack<Integer> stack = new Stack<>(); //int형 스택 선언
stack.push(1); // stack에 값 1 추가
stack.push(2); // stack에 값 2 추가
stack.push(3); // stack에 값 3 추가
Stack<Integer> stack = new Stack<>(); //int형 스택 선언
stack.push(1); // stack에 값 1 추가
stack.push(2); // stack에 값 2 추가
stack.push(3); // stack에 값 3 추가
stack.pop(); // stack에 값 제거
stack.clear(); // stack의 전체 값 제거 (초기화)
Stack<Integer> stack = new Stack<>(); //int형 스택 선언
stack.push(1); // stack에 값 1 추가
stack.push(2); // stack에 값 2 추가
stack.push(3); // stack에 값 3 추가
stack.peek(); // stack의 가장 상단의 값 출력
Stack<Integer> stack = new Stack<>(); //int형 스택 선언
stack.push(1); // stack에 값 1 추가
stack.push(2); // stack에 값 2 추가
stack.size(); // stack의 크기 출력 : 2
stack.empty(); // stack이 비어있는제 check (비어있다면 true)
stack.contains(1) // stack에 1이 있는지 check (있다면 true)