Collections Framework 5 : 스택과 큐 (Stack & Queue)

이의준·2024년 6월 7일

Java

목록 보기
63/87

스택 (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("괄호가 일치하지 않습니다.");
        }
    }


0개의 댓글