用两个栈实现队列
import java.util.Stack;
public class E09CreateQueueByStack<T> {
private Stack<T> stack1 = new Stack<>();
private Stack<T> stack2 = new Stack<>();
public void addTail(T element){
stack1.push(element);
}
public T deleteHead(){
if (stack2.empty()){
while(!stack1.empty())
stack2.push(stack1.pop());
if (stack2.empty())
throw new IllegalArgumentException("Empty Queue");
else
return stack2.pop();
}
else
return stack2.pop();
}
public static void main(String[] args){
E09CreateQueueByStack<Integer> queue = new E09CreateQueueByStack<>();
for (int i = 0; i < 10; i++)
queue.addTail(i);
System.out.print(queue.deleteHead());
}
}
用两个队列实现栈
import java.util.LinkedList;
import java.util.Queue;
public class E09CreateStackByQueue<T> {
private Queue<T> queue1 = new LinkedList<>();
private Queue<T> queue2 = new LinkedList<>();
public T deleteTail(){
if(!queue1.isEmpty()){
while(queue1.size() > 1)
queue2.offer(queue1.poll());
return queue1.poll();
}
if(!queue2.isEmpty()){
while(queue2.size() > 1)
queue1.offer(queue2.poll());
return queue2.poll();
}
throw new IllegalArgumentException("Empty Stack");
}
public void addTail(T element){
if (!queue1.isEmpty())
queue1.offer(element);
else if (!queue2.isEmpty())
queue2.offer(element);
else
queue1.offer(element);
}
public static void main(String[] args){
E09CreateStackByQueue<Integer> stack = new E09CreateStackByQueue<>();
stack.addTail(1);
stack.addTail(2);
stack.addTail(3);
System.out.println(stack.deleteTail());
}
}