队列:先进先出
栈:先进后出
1.入栈
假设刚开始入到队列q2里
2.出栈
就是把33出栈
q2不为空,可以将q2出队,直到q2中只剩下一个元素33。
然后将33出队,就实现了出栈操作
之后q1不为空,将q1出队,只剩一个22
将22出队,又实现了一次出栈操作(将22出栈)
最后将11出队,就将全部的元素出栈了
接下来就用已经封装好的队列实现栈的入栈和出栈操作
1.入栈
public static void enterStack(QueueLink q1,QueueLink q2,int val){
QueueLink p = null;//指向入栈的队列
if(!q1.isEmpty()){//初始入栈到s2
p = q1;
}else{
p = q2;
}
p.push(val);
}
2.出栈
public static int popStack(QueueLink q1,QueueLink q2){
QueueLink p1 = null;//永远指向出队的队列
QueueLink p2 = null;//永远指向出队后的元素需要放置的地方
if(!q1.isEmpty()){//q1不为空,那就让p1指向q1
p1 = q1;
p2 = q2;
}else{//否则就让p1指向q2
p1 = q2;
p2 = q1;
}
//已经确认了出队的队列,以及将来需要把出队后的队列放在什么地方
//开始出队
if(p1.isEmpty()){//出队的队列为空
}else{//出元素,出到只剩下一个
while(p1.getSize() > 1){
p2.push(p1.pop());
}
return p1.pop();
}
return -1;
}