본문으로 바로가기

1. Stack, Queue

push -----┐    ┌-----▶ pop
          ▼    |
        |         |
        |---------|
        |    2    |
        |---------|
        |    1    |
        |---------|
        |    0    |
        |---------|
        |---------|

Stack은 LIFO 구조입니다.

 

LIFO: Last In First Out(마지막에 들어온 것이 먼저 나간다)

 

아래서부터 차례대로 쌓인다고 보면됩니다.

 

0 -> 1 -> 2 로 쌓았을 때 제일 먼저 나가는 것은 무엇일 까요?

 

2겠죠. 즉 스택은 ArrayList와 같은 배열 기반 컬렉션 클래스가 적당합니다.

 

offer -------┐    
             ▼    
        |         |
        |---------|
        |    2    |
        |---------|
        |    1    |
        |---------|
        |    0    |
        |---------|
        |         |
              |
              └-------▶ poll

Queue는 대기줄..? 이라고 보면 될것 같습니다.

 

줄을 먼저 차지한 사람이 먼저 나가게 되는거죠

 

0이 들어오면 0부터 나가게 됩니다.

 

따라서 순서대로 꺼내게 됩니다. 0 1 2 를 넣었다면 0 1 2로 꺼내지게 됩니다.

 

LinkedList로 구현하는 것이 적합합니다. 왜냐하면 ArrayList로 할 경우 매번 맨 앞 데이터를 삭제해서 

 

빈 공간을 채울 때 데이터 복사가 일어나 비효율 적입니다.

 

2. 예제

public class StackQueueEx {
    public static void main(String[] args) {
        Stack stack = new Stack();
        Queue queue = new LinkedList();

        stack.push("0");
        stack.push("1");
        stack.push("2");
        stack.push("3");

        queue.add("0");
        queue.add("1");
        queue.add("2");
        queue.add("3");

        System.out.println("stack");
        while (!stack.empty())
            System.out.println(stack.pop());

        System.out.println();

        System.out.println("Queue");
        while (!queue.isEmpty())
            System.out.println(queue.poll());
    }
}
Stack
3
2
1
0

Queue
0
1
2
3