0
点赞
收藏
分享

微信扫一扫

Leetcode刷题日记(十一)

古得曼_63b6 2022-04-08 阅读 49

又来到一晚一度的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();
    }
};

说实话,这道题挺难理解的,博主也只能理解个大概。好啦,今天就到这啦。

本贴为博主亲手整理。如有错误,请评论区指出,一起进步。谢谢大家的浏览.

举报

相关推荐

0 条评论