用两个栈stack1和stack2模拟一个队列时,stack1作输入栈,逐个元素压栈,以此模拟队列元素的入队。当需要出队时,将栈stack1退栈并逐个压入栈stack2中,stack1中最先入栈的元素,在stack2中处于栈顶。stack2退栈,相当于队列的出队,实现了先进先出。显然,只有栈stack2为空且stack1也为空,才算是队列空。
入栈时,若stack1未满则直接入栈,否则若stack2为空,则先将stack1的元素转移到stack2中再入栈;出栈时,若stack2不为空则直接出栈,否则若stack1不为空则将stack1中的元素倒入stack2再出栈。
这里用java的Stack类来实现,由于Stack使用Vector实现的,可动态增长,则入栈时无需考虑栈是否已满。
/**
* @author wjh
*
*/
public class StackToQueue {
private static Stack stack1 = new Stack();
private static Stack stack2 = new Stack();
//入队
private void enqueue(Stack stack1, int x){
stack1.push(x);
System.out.println("入队元素:"+x);
}
//出队
private void dequeue(Stack stack2){
int