用两个队列实现一个栈
1.入栈
入队的时候看哪个栈队列不为空则给哪个入队。
public static void enterStack(QueueLink q1,QueueLink q2,int val){
QueueLink p = null;
if(!q1.isEmpty()){
p = q1;
}else{
p = q2;
}
p.push(val);;
}
2.出栈
每次使p1指向要出队的队列,p2指向一个空队列,为要入队的队列,将p1依次出队,p1的值依次入队到p2中,直到p1中只剩一个元素,出队即可,队列p1最后出队的值就是最后入队的值,也就符合了栈先进后出的特点。
public static int pop(QueueLink q1,QueueLink q2){
QueueLink p1 = null;//永远指向出队的队列
QueueLink p2 = null;//永远指向出队后的元素需要放置的位置。
if(!q1.isEmpty()){
p1 = q1;
p2 = q2;
}else{
p1 = q2;
p2 = q1;
}
//确认好出队的队列以及将来需要把出队后放在什么地方。
//开始出队。
int num = -1;
if(p1.isEmpty()){
return -1;
}else{
//出元素,只剩下一个。
while(p1.getSize() > 1){
num = p1.pop();//把p1指向的队列出队只剩一个元素。
p2.push(num);//把p1的元素依次放入p2中。
}
}
return p1.pop();
}
3.测试结果
public static void main(String[] args) {
QueueLink q1 = new QueueLink();
QueueLink q2 = new QueueLink();
enterStack(q1,q2,1);
enterStack(q1,q2,3);
enterStack(q1,q2,5);
enterStack(q1,q2,2);
enterStack(q1,q2,4);
System.out.println(pop(q1,q2));
System.out.println(pop(q1,q2));
System.out.println(pop(q1,q2));
System.out.println(pop(q1,q2));
System.out.println(pop(q1,q2));
}