프로그래밍/자료구조/알고리즘

2개의 스택(Stack) 을 이용하여 큐(Queue) 만들기

[Noa] 2014. 11. 12. 10:09


2개의 스택을 이용하여 큐를 구현하는 방법을 포스팅 해보겠습니다.

 

생각보다 아주 간단합니다.

 

 

 

 

<그림> 2개의 스택을 사용한 큐를 구현 하는 원리

 

 

알고리즘 내용

1. inBox 에 데이터를 push(삽입)한다. - A,B

2. inBox 에 있는 데이터를 pop(추출) 하여 outBox 에 push(삽입) 한다. - B,A

3. outBox 에 있는 데이터를 pop(추출) 한다. - A,B 순으로 출력됨

 

즉 inBox 스택에 A,B 순으로 데이터를 삽입하면 위에 처럼 inBox 스택에 위와 같은 순서로 쌓입니다.

그리고 inBox 스택에 있는 데이터를 pop 해서 outBox로 옮깁니다. 그렇게 되면

outBox 에는 B, A 순으로 쌓입니다.

그리고 다시 outBox 스택에 있는 데이터를 pop 하는경우 A,B 순으로 데이터가 출력 됩니다.

 

 

자바 소스코드로 보여드리겠습니다.

 

소스코드

public class Queue {

	private Stack inBox = new Stack();
	private Stack outBox = new Stack();
	
	public void enQueue(Object item) {
		inBox.add(item);
	}
	
	public Object deQueue() {
		
		if (outBox.isEmpty()) {
			while(!inBox.isEmpty()) {
				outBox.push(inBox.pop());
			}
		}
		return outBox.pop();
	}
	
	public static void main(String[] args) {
		Queue queue = new Queue();
		queue.enQueue("A");
		queue.enQueue("B");
		queue.enQueue("C");
		
		System.out.println(queue.deQueue());
		System.out.println(queue.deQueue());
		System.out.println(queue.deQueue());
	}

}


출력결과

A,B,C