2개의 Stack 자료구조를 이용하여 Queue의 구현이 가능하다.

 

 

 

 

Enqueue: 원소를 stack1 Push

 

Dequeue: Stack2가 비어있다면 Stack1에서 원소들을 Pop하여, stack2 Push한 뒤 Stack2에서 원소를 Pop

Stack2가 비어있지 않다면, Stack2에서 그대로 원소를 Pop

 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class QueueUsingStack{
 
    // define 2 stacks for implementing queue
    private Stack stack1 = new Stack();
    private Stack stack2 = new Stack();
 
    // Enque - push the element in stack1
    public void enque(int element)
        stack1.push(element);
 
    // Dequeue - pop the element from stack2 
    // and pop the element from stack1
    public E deque(){
        if(stack2.isEmpty())
        {
            while(!stack1.isEmpty())
                stack2.push(stack1.pop());
        }
 
        return stack2.pop();
    }
 
}
cs



* 시간 복잡도: 

- Enque: 집어 넣고자 하는 element를 그대로 Push하기 때문에 O(1)

- Deque: Stack2가 비어있을 경우, Stack1에 들어가 있는 원소의 개수만큼 Stack2로 옮겨야 하기 때문에 O(N)

-> 결과적으로 O(N)의 시간 복잡도를 지니는 자료구조


cf. Enque 당시 바로 Stack1에서 Stack2에 옮기는 방식으로 FIFO의 구조를 갖추고(O(N)의 시간복잡도), Deque 때 FIFO의 순서가 갖춰진 자료를 꺼내어 O(1)의 시간 복잡도를 지니게 할 수도 있음. 결과적으로 같은 구조 !


+ Recent posts