如何用队列结构实现栈结构(用两个队列)
package com.harrison.class02;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class Code08_TwoQueuesImplementStack {
public static class TwoQueueToStack<T> {
public Queue<T> queue;
public Queue<T> help;
public TwoQueueToStack() {
queue=new LinkedList<>();
help=new LinkedList<>();
}
public void push(T value) {
queue.offer(value);
}
public T poll() {
while(queue.size()>1) {
help.offer(queue.poll());
}
T ans=queue.poll();
Queue<T> tmp=queue;
queue=help;
help=tmp;
return ans;
}
public T peek() {
while(queue.size()>1) {
help.offer(queue.poll());
}
T ans=queue.poll();
help.offer(ans);
Queue<T> tmp=queue;
queue=help;
help=tmp;
return ans;
}
public boolean isEmpty() {
return queue.isEmpty();
}
}
public static void main(String[] args) {
System.out.println("test begin");
TwoQueueToStack<Integer> myStack=new TwoQueueToStack<>();
Stack<Integer> test=new Stack<Integer>();
int testTimes=1000000;
int max=1000000;
for(int i=0; i<testTimes; i++) {
if(myStack.isEmpty()) {
if(!test.isEmpty()) {
System.out.println("Oops");
}else {
int num=(int)(Math.random()*max);
myStack.push(num);
test.push(num);
}
}else {
if(Math.random()<0.25) {
int num=(int)(Math.random()*max);
myStack.push(num);
test.push(num);
}else if(Math.random()<0.5) {
if(!myStack.peek().equals(test.peek())) {
System.out.println("Oops");
}
}else if(Math.random()<0.75) {
if(!myStack.poll().equals(test.pop())) {
System.out.println("Oops");
}
}else {
if(myStack.isEmpty()!=test.isEmpty()) {
System.out.println("Oops");
}
}
}
}
System.out.println("finish");
}
}