1、栈实现队列
public class StackToQueue<T> {
已知栈具有先进后出的特点,而队列是先进先出,所以借助另一栈获得其栈底元素
private Stack<T> out=new Stack<>();
private Stack<T> in=new Stack<>();
public void add(T integer){
in.add(integer);
}
public T push(){
if(in.size()==0)return null;
while(in.size()!=1){
out.add(in.pop());
}
T rest = in.pop();
while(!out.isEmpty()){
in.add(out.pop());
}
return rest;
}
}
2、队列实现栈
public class QueueToStack<T> {
//已知栈具有先进后出的特点,而队列是先进先出,所以借助另一队列其排列相反
private Queue<T> in = new LinkedList<>();//用于添加队列
private Queue<T> out = new LinkedList<>();//由于取出元素
public void add (T i){
in.add(i);//正常添加
}
public T push(){
if(in.size()==0)return null;
while (in.size()!=1){
out.add(in.poll());//将队首以后的元素放入取出队列,知道只剩下一个也就是队首
}
T rest = in.poll();//将队首值记录返回
while (!out.isEmpty()){
in.add(out.poll());//将剩余元素放回队列
}
return rest;
}
}
3、同时进行测试
public class Test {
public static void main(String[] args) {
System.out.println("*******栈实现队列***********");
StackToQueue q = new StackToQueue();
q.add(1);
q.add(2);
q.add(3);
q.push();
q.push();
q.add(4);
q.add(5);
q.add(6);
for (int i = 0; i <7; i++) {
System.out.println(q.push());
}
System.out.println("*******队列实现栈***********");
QueueToStack s = new QueueToStack();
s.add(1);
s.add(2);
s.add(3);
s.push();
s.push();
s.add(4);
s.add(5);
s.add(6);
for (int i = 0; i <7; i++) {
System.out.println(s.push());
}
}
}
结果符合栈和队列的定义。