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

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

//两个队列构成一个栈
//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;
}

 与作者提供思路一致!

posted on 2013-08-08 12:01  -赶鸭子上架-  阅读(294)  评论(0编辑  收藏  举报