package com.algorithm.exersice;
import java.util.*;
public class E7 {
public static void main(String[] args) {
System.out.println("两个栈实现队列:");
CQueue<Integer> queue = new CQueue<Integer>();
queue.appendTail(1);
queue.appendTail(2);
queue.appendTail(3);
System.out.println(queue.deleteHead());
queue.appendTail(4);
System.out.println(queue.deleteHead());
System.out.println(queue.deleteHead());
System.out.println(queue.deleteHead());
System.out.println(queue.deleteHead());
queue.appendTail(5);
System.out.println(queue.deleteHead());
System.out.println("两个队列实现栈:");
CStack<Integer> stack = new CStack<>();
stack.push(1);
stack.push(2);
System.out.println(stack.pop());
stack.push(3);
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
}
class CStack<T> {
private Queue<T> queue1;
private Queue<T> queue2;
public CStack(){
this.queue1 = new LinkedList<>();
this.queue2 = new LinkedList<>();
}
public void push(T node) {
queue1.add(node);
}
public T pop() {
if (!queue1.isEmpty()) {
T node = queue1.poll();
while (!queue1.isEmpty()) {
queue2.add(node);
node = queue1.poll();
}
return node;
} else if (!queue2.isEmpty()){
T node = queue2.poll();
while (!queue2.isEmpty()) {
queue1.add(node);
node = queue2.poll();
}
return node;
} else {
return null;
}
}
}
class CQueue<T> {
private Stack<T> stack1;
private Stack<T> stack2;
public CQueue() {
this.stack1 = new Stack<>();
this.stack2 = new Stack<>();
}
public void appendTail(T node) {
stack1.push(node);
}
public T deleteHead() {
if (stack2.isEmpty()) {
while (!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
}
return stack2.isEmpty()? null :stack2.pop();
}
}