스택 선언, 초기화
public class QueueUsingStack<T> {
Stack<T> s1;
Stack<T> s2;
public QueueUsingStack(int maxSize) {
this.s1 = new Stack<>(maxSize);
this.s2 = new Stack<>(maxSize);
}
enqueue 구현
dequeue 구현
- 조건 1 : Stack1, Stack2 비어있는 경우
- 조건 2 : Stack2 비어있는 경우
- Stack1 모든 값을 Stack2로 push 하여 옮깁니다. 완료되면 Stack2 pop 하여 값을 반환합니다.
- 조건 3 : Stack2 비어있지 않은 경우
public T dequeue() {
if (isEmpty()) {
return null;
} else if (s2.isEmpty()) {
while (!s1.isEmpty()) {
s2.push(s1.pop());
}
return s2.pop();
} else {
return s2.pop();
}
}
public boolean isEmpty() {
if (s1.isEmpty() && s2.isEmpty()) {
return true;
}
return false;
}
실행결과
public static void main(String args[]) {
QueueUsingStack<Integer> q = new QueueUsingStack(4);
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
System.out.println(q.dequeue());
System.out.println(q.dequeue());
System.out.println(q.dequeue());
System.out.println(q.dequeue());
q.enqueue(1);
q.enqueue(2);
System.out.println(q.dequeue());
System.out.println(q.dequeue());
System.out.println(q.dequeue());
}
1
2
3
null
1
2
null
댓글 영역