题目描述:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路:栈是先进后出,队列是先进先出。要利用两个栈实现队列,Push方法相当于向栈1中入栈,而Pop方法就需要思考一下,具体为当元素全部压入栈1后,再出栈,然后将出栈的元素依次压入栈2,直到栈1中只剩下最后一个元素,然后将这个元素出栈输出,即为队列的第一个元素出列,然后再将栈2中的元素依次出栈输出,即为队列的其他元素的出列。总的来说,算法比较简单。
代码如下:
import java.util.*;
public class Main11
{
public static void main(String[] args)
{
Queues q = new Queues();
for(int i=0;i<7;i++)
{
q.Push(i);
}
for(int i=0;i<6;i++)
{
System.out.println(q.Pop());
}
q.Push(8);
System.out.println(q.Pop());
System.out.println(q.Pop());
}
}
class Queues
{
Stack<Integer> s1 = new Stack<Integer>(); //栈1
Stack<Integer> s2 = new Stack<Integer>(); //栈2
public void Push(int a) //入队
{
s1.push(a); //向栈1中入栈相当于入队
}
public int Pop()
{
if(s2.size()==0)
{
while(s1.size()>1) //将s1中的元素压入s2中,剩1个
{
s2.push(s1.pop());
}
if(s1.size()==1)
{
return s1.pop();
}
}
return s2.pop();
}
}
以上代码可能会有一些错误,还望指正,对于边界的判断,上面的代码没有进行详细的判断,会抛出异常。
本人经验,仅供参考!