스택과 큐(Stack & Queue)의 활용
- 스택의 활용 예
- 수식계산, 수식괄호검사, 워드프로세서의 redo/undo, 웹브라우저의 뒤로/앞으로
- 큐의 활용 예
- 최근사용문서, 인쇄작업 대기목록, 버퍼(buffer)
실습
class Ex1 {
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("괄호가 일치하지 않습니다!!");
}
}
}
class Ex1 {
static Queue q = new LinkedList();
static final int MAX_SIZE = 5;
public static void main(String[] args) {
System.out.println("help를 입력하면 도움말을 볼 수 있다.");
while(true) {
System.out.println(">>");
try {
Scanner s = new Scanner(System.in);
String input = s.nextLine().trim();
if("".equals(input)) continue;
if(input.equalsIgnoreCase("q")) {
System.exit(0);
} else if(input.equalsIgnoreCase("help")) {
System.out.println(" help - 도움말");
System.out.println(" q 또는 Q - 프로그램 종료");
System.out.println(" history - 최근에 입력한 명령어를 "
+ MAX_SIZE +"개 보여줍니다.");
} else if(input.equalsIgnoreCase("history")) {
save(input);
LinkedList list = (LinkedList)q;
final int SIZE = list.size();
for(int i=0; i<SIZE; i++)
System.out.println((i+1)+"."+list.get(i));
} else {
save(input);
System.out.println(input);
}
} catch(Exception e){
System.out.println("입력오류입니다.");
}
}
}
public static void save(String input) {
if(!"".equals(input))
q.offer(input);
if(q.size() > MAX_SIZE)
q.remove();
}
}