题目:用两个栈实现队列
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解题思路
栈和队列的概念:
栈:后进先出(LIFO-last in first out):最后插入的元素最先出来。
队列:先进先出(FIFO-first in first out):最先插入的元素最先出来。
编程思路
建立两个栈,栈A和栈B
入队:将元素进栈A
出队:判断栈B是否为空,如果为空,则将栈A中的每个元素pop,并push进栈B,取出栈B的顶端值并将其返回
参考代码
using System.Collections.Generic; //引入命名空间
class Solution
{
public Stack<int> stackA = new Stack<int>(); //建立栈A
public Stack<int> stackB = new Stack<int>(); //建立栈B
public void push(int node)
{
stackA.Push(node); //进栈
}
public int pop()
{
if(stackB.Count == 0) //如果栈B为空,则将栈A中数据依次压入栈B中
{ //即实现数据的翻转
while(stackA.Count > 0)
{
int temp = stackA.Pop();
stackB.Push(temp);
}
}
int result = stackB.Pop(); //将栈B的栈尾(栈A的栈首)出栈
while(stackB.Count > 0) //再将栈B中数据倒入栈A中,方便下次操作
{
int temp = stackB.Pop();
stackA.Push(temp);
}
return result;
}
}