zoukankan      html  css  js  c++  java
  • 两个栈实现一个队列

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

    解题思路

    假设两个栈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对象是否为空。降低一些不必要的推断能够提高程序效率。

  • 相关阅读:
    python3中,os.path模块下常用的用法总结
    python 中str format 格式化数字补0方法
    5分钟让你明白“软链接”和“硬链接”的区别
    获得Python脚本所在目录
    sshd超时
    pip 指定源安装
    python编程规范
    Git冲突解决
    Git冲突解决
    git 更新某个目录或文件
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6999251.html
Copyright © 2011-2022 走看看