Last-in, First-out 방식
push
: top을 통해 삽입하는 연산pop
: top을 통해 삭제하는 연산(예) 웹 브라우저 방문기록, 역순 문자열 만들기, 실행 취소 등
First-in, First-out 방식
enQueue
: 삽입연산deQueue
: 삭제연산(예) 프로세스 관리, 은행 업무, 너비 우선 탐색, 캐시 구현
스택 1: add()
할 때만 사용
스택 2: peek()
, poll()
할때만 사용
과정
import java.util.Stack;
public class Queue<T> {
Stack<T> stack1 = new Stack<>();
Stack<T> stack2 = new Stack<>();
private void moveIfAbsent() {
if (stack2.size() == 0)
while (stack1.size() != 0)
stack2.add(stack1.pop());
}
public void add(T t) {
stack1.add(t);
}
public T peek() {
moveIfAbsent();
return stack2.peek();
}
public T poll() {
moveIfAbsent();
return stack2.pop();
}
public int size() {
return stack1.size() + stack2.size();
}
}
삽입:
삭제:
스택/큐 시간복잡도
배열로 스택을 구현하면
배열로 큐를 구현하면
Prefix: 연산자가 제일 앞에 오고 피연산자가 연달아 위치 (ex) +ab
Infix: 연산자를 중심으로 양쪽에 피연산자 위치 (ex) a+b
Postfix: 피연산자가 연달아 위치하고 연산자가 제일 뒤에 위치 (ex) ab+
스택으로 Postfix 구현: 수식을 왼쪽부터 오른쪽으로 처리
Deque, double ended queue: 양 끝에서 추가/삭제 등이 가능한 자료 구조
직접 구현할 수도 있고, 원형큐나 배열 또는 링크드리스트를 이용해 구현할 수 있음
참고: