又来到一晚一度的leetcode刷题时间啦,虽会迟但会到的。真的,博主无论多忙,在晚上想睡觉之前都会想起给大家分享题目的事情,这可能已经慢慢地成为每天睡前必做的事了。好啦,废话不多说,今天我们来看看栈和队列结合的题目吧,这是一道用栈来实现队列的题目。
下面直接上题目:
这道题的思路是使用两个栈,
将一个栈当作输入栈,用于压入 \texttt{push}push 传入的数据;另一个栈当作输出栈,用于 pop和 peek 操作。每次pop 或peek 时,若输出栈为空则将输入栈的全部数据依次弹出并压入输出栈,这样输出栈从栈顶往栈底的顺序就是队列从队首往队尾的顺序。
解题代码:
class MyQueue
{
private:
stack<int> inStack, outStack;//创建两个栈的容器,一个叫入栈,一个叫出栈
void in2out()//类的成员函数
{
while (!inStack.empty())
{
outStack.push(inStack.top());//(进栈)的栈顶元素进入(出栈)中
inStack.pop();//输出栈顶元素
}
}
public:
MyQueue() {}
void push(int x)
{
inStack.push(x);//(进栈)输入数据
}
int pop()
{
if (outStack.empty())
{
in2out();
}
int x = outStack.top();
outStack.pop();
return x;
}
int peek()
{
if (outStack.empty())
{
in2out();
}
return outStack.top();//返回栈顶元素
}
bool empty()//判断函数
{
return inStack.empty() && outStack.empty();
}
};
说实话,这道题挺难理解的,博主也只能理解个大概。好啦,今天就到这啦。
本贴为博主亲手整理。如有错误,请评论区指出,一起进步。谢谢大家的浏览.