题目描述:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
分析:
入队:将元素进栈A
出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈;
如果不为空,栈B直接出栈。
错误分析:
自己写代码时遇到了一个及其严重的错误,那就是容器有删除和添加元素时用了for循环,而且是size()函数循环,这是一个及其严重的错误,要用迭代器或者,while(!empty())函数,因为增加或者删除元素就是在改变size,怎么可能再用size,还有就是对容器的pop函数理解的不够透彻,竟然还想让它返回数,它是void类型的,就是pop之后直接就是在顶部删除元素了,以后切记!!!
for (int i = 0; i < stack1.size();i++)
{
num = stack1.top();
stack2.push(num);
stack1.pop();
}
自己代码:
#include<stack>
int num = 0;
int num1 = 0;
class Solution
{
public:
void push(int node) {
stack1.push(node);
}
int pop() {
if (stack2.empty())
{
while(!stack1.empty())
{
num = stack1.top();
stack2.push(num);
stack1.pop();
}
}
num1 = stack2.top();
stack2.pop();
return num1;
}
private:
stack<int> stack1;
stack<int> stack2;
};
用两个队列实现一个栈的功能:
将queue1用作进栈出栈,queue2作为一个中转站
入栈时,直接压入queue1中
出栈时,先将queue1中的元素除最后一个元素外依次出队列,并压入队列queue2中,将留在queue1中的最后一个元素出队列即为出栈元素,最后还要把queue2中的元素再次压入queue1中