牛客网刷题:【剑指offer】
1、题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
2、解析:主要采用栈的push(进栈)与pop(出栈)的原理来对队列和栈进行操作。利用模拟的方法先定义一个stack1和stack2,push操作就直接往stack1中push, pop操作需要分类一下;如果stack2为空,那么需要将stack1中的数据转移到stack2中,然后在对stack2进行pop,如果stack2不为空,就可以直接pop。
3、代码:
class Solution
{
public:
void push(int node) //定义 进栈node //
{
stack1.push(node);// 将node进栈到stack1中//
}
int pop() //定义出栈//
{
if (stack2.empty())
{
while (!stack1.empty())
{
stack2.push(stack1.top());
stack1.pop();//如果stack2为空,stack1不为空时,将stack1中的数据转移到stack2中,stack1出栈//
}
}
int ret = stack2.top(); //将stack2的栈顶定义为 整形ret//
stack2.pop();
return ret;//stack2出栈,返回ret//
}
private:
stack<int> stack1;
stack<int> stack2;
};
4、总结这一题比较好理解,但算法也要很牢的基础才能很快想出来,要很熟练数据结构。