两个栈实现队列

题目:

    编写一个类,用两个栈实现队列,支持进队列,出队列,获取队列头元素

思路:

    使用两个栈,因为栈的特性是后进先出,两个栈正好把顺序反过来(stackPush,stackPop)

注意:

    1. 如果stackPush要往stackPop中压入数据,那么必须一次性把stackPush中全部元素压入,并且删除

    2. 如果stackPop不为空,stackPush绝对不能往stackPop压数据

代码:

#include <stack>

using namespace std;

class TwoStackQueue
{
private:
    stack<int> stackPush;
    stack<int> stackPop;

public:

    void enqueue(int v)
    {
        stackPush.push(v);
    }

    void dequeue()
    {
        if( stackPush.empty() && stackPop.empty() )
            return ;
        else if( stackPop.empty() )
        {
            while( !stackPush.empty() )
            {
                stackPop.push(stackPush.top());
                stackPush.pop();
            }
        }
        stackPop.pop();
    }

    bool front(int& r)
    {
        if( stackPush.empty() && stackPop.empty() )
            return false;
        else if( stackPop.empty() )
        {
            while( !stackPush.empty() )
            {
                stackPop.push(stackPush.top());
                stackPush.pop();
            }
        }

        r = stackPop.top();

        return true;
    }
};


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/king_qg/article/details/80353876
个人分类: 左神-栈和队列
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭