• 两个栈实现一个队列


    用两个栈实现一个队列的功能。

    解题思路

    假设两个栈A和B,且都为空。


    栈A提供push()功能,栈B提供pop()功能。

    • 入队列:入栈A。

    • 出队列:
      • 假设栈B不为空。直接弹出B的元素。

      • 假设栈B为空,则依次弹出栈A的元素并压入栈B中,再弹出B中的元素。

    实现代码

    #include <iostream>
    #include <stack>
    using namespace std;
    
    template<class T>
    class MyQueue
    {
    public:
        void push(const T& t)
        {
            s1.push(t);
        }
    
        void pop()
        {
            if (s2.empty())
            {
                while (!s1.empty())
                {
                    s2.push(s1.top());
                    s1.pop();
                }
            }
            s2.pop();
        }
    
        T& top()
        {
            if (s2.empty())
            {
                while (!s1.empty())
                {
                    s2.push(s1.top());
                    s1.pop();
                }
            }
    
            return s2.top();
        }
    
        bool empty() const
        {
            return s1.empty() && s2.empty();
        }
    
    private:
        stack<T> s1;
        stack<T> s2;
    };
    
    
    int main()
    {
        MyQueue<int> myque;
        for (int i = 0; i < 10; i++)
        {
            myque.push(i);
        }
    
        while (!myque.empty())
        {
            cout<<myque.top()<<" ";
            myque.pop();
        }
    }

    注意:pop()top()中没有再加上if (!s2.empty())的推断,我觉得此处应该由使用者来推断MyQueue对象是否为空。降低一些不必要的推断能够提高程序效率。

  • 相关阅读:
    功能点方法
    学数答题160908-数论不等式
    学数答题160903-函数方程
    学数答题160906-不等式最值
    学数答题160905-函数方程
    学数答题160904-不等式
    学数答题160903-三角函数
    kitti-b站教程
    kitti数据集介绍
    SLAM:理论与实践
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6999251.html
Copyright © 2020-2023  润新知