스택 (Stack)
- LIFO (Last In First Out) 구조
- 마지막에 저장된 것을 제일 먼저 꺼내게 됨
- 밑이 막힌 상자
- 배열로 구현이 유리
- Stack st = new Stack();
큐 (Queue)
- FIFO (First In First Out) 구조
- 제일 먼저 저장한 것을 제일 먼저 꺼냄
- 파이프
- LinkedList로 구현이 유리
- Queue q = new LinkedList();
스택의 메서드
| 메서드 | 설명 |
|---|
| boolean empty() | Stack이 비어있는지 알려준다. |
| Object peek() | Stack의 맨 위에 저장된 객체를 반환. pop()과 달리 Stack에서 객체를 꺼내지는 않음. (비었을 때는 EmptyStackException 발생) |
| Object pop() | Stack의 맨 위에 저장된 객체를 꺼낸다. (비었을 때는 EmptyStackException 발생) |
| Object push(Object item) | Stack에 객체(item)를 저장한다. |
| int search(Object o) | Stack에서 주어진 객체(o)를 찾아서 그 위치를 반환. 못 찾으면 -1을 반환. (배열과 달리 위치는 0이 아닌 1부터 시작) |
큐의 메서드
| 메서드 | 설명 |
|---|
| boolean empty() | Stack이 비어있는지 알려준다. |
| Object peek() | Stack의 맨 위에 저장된 객체를 반환. pop()과 달리 Stack에서 객체를 꺼내지는 않음. (비었을 때는 EmptyStackException 발생) |
| Object pop() | Stack의 맨 위에 저장된 객체를 꺼낸다. (비었을 때는 EmptyStackException 발생) |
| Object push(Object item) | Stack에 객체(item)를 저장한다. |
| int search(Object o) | Stack에서 주어진 객체(o)를 찾아서 그 위치를 반환. 못 찾으면 -1을 반환. (배열과 달리 위치는 0이 아닌 1부터 시작) |
스택과 큐의 활용
- 스택의 활용 예 : 수식계산, 수식괄호검사, 워드프로세서의 undo/redo, 웹브라우저의 뒤로/앞으로
- 큐의 활용 예 : 최근사용문서, 인쇄작업 대기목록, 버퍼(buffer)
스택을 이용해서 괄호 일치 여부 계산하기
public static void main(String[] args) {
Stack st = new Stack();
String expression = "((3+5)*8)-2";
System.out.println("expression : " + expression);
try {
for (int i = 0; i < expression.length(); i++) {
char ch = expression.charAt(i);
if (ch == '(') {
st.push(ch + "");
} else if (ch == ')') {
st.pop();
}
}
if (st.isEmpty()) {
System.out.println("괄호가 일치합니다.");
} else {
System.out.println("괄호가 일치하지 않습니다.");
}
} catch (EmptyStackException e) {
System.out.println("괄호가 일치하지 않습니다.");
}
}