• 题目:两个单向队列构成一个栈


    题目:两个单向队列构成一个栈

    //两个队列构成一个栈
    //StackWithTwoQueues
    #include<queue>   //STL
    #include<iostream>
    
    using namespace std;
    
    template<class T>
    class BStack
    {
        public:
            BStack();
            ~BStack();
    
            void InStack(const T& elem);
            T OutStack();
        private:
            queue<T> q1;
            queue<T> q2;
    };
    
    //思路:一个队列空,另一个队列则‘入栈’操作;
    //      在删除‘栈顶’时,先对非空队列前n-1个元素出队、入队到另一队列,
    //      最后元素为待删‘栈顶’
    
    template<class T>
    BStack<T>::BStack()
    {
    }
    
    template<class T>
    BStack<T>::~BStack()
    {
    }
    
    template<class T>
    void BStack<T>::InStack(const T& elem)
    {
        if(!q2.empty())
            q2.push(elem);
        else
            q1.push(elem);
    }
    
    
    template<class T>
    T BStack<T>::OutStack()
    {
        T data;
        T top;
        if(!q1.empty())
        {
            while(q1.size() > 1)
            {
                data = q1.front();
                q1.pop();
                q2.push(data);
            }
            top = q1.front();
            q1.pop();
        }
        else if(!q2.empty())
        {
            while(q2.size() > 1)
            {
                data = q2.front();
                q2.pop();
                q1.push(data);
            }
            top = q2.front();
            q2.pop();
        }
        else
        {
            cerr<<"Stack is empty!"<<endl;
            exit(1);
        }
    
        return top;
    }

     与作者提供思路一致!

    清醒时做事,糊涂时读书,大怒时睡觉,独处时思考; 做一个幸福的人,读书,旅行,努力工作,关心身体和心情,成为最好的自己 -- 共勉
  • 相关阅读:
    SQL 中不同类型的表连接
    分享一些不错的sql语句
    SQL Server 日期和时间函数
    Delete,Update与LEFT Join
    Excel 相对引用与绝对引用
    SQL Update 巧用
    Delphi 多步操作产生错误,请检查每一步的状态值
    003-mysql查询表的数据大小、索引大小
    002-导出表结构、数据字典、说明文档
    008-运维管理链码
  • 原文地址:https://www.cnblogs.com/hello-yz/p/3245527.html
Copyright © 2020-2023  润新知