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

#include<iostream>

#include<stack>

using namespace std;


/*使用两个堆栈实现队列

 s1:实现入队,s2:实现出队

 首先,将数据存放在栈s1中,然后将数据pushs2中,再将s2中的数据pop

 出队列:

 1)如果栈B不为空,直接弹出栈B的数据

 2)如果栈B为空,则依次弹出栈A的数据,放入栈B中,再弹出栈B的数据

 */

template<class T>


struct Queue

{

    stack<T> s1;

    stack<T> s2;

    

    //s1入栈一个元素

    void push(T &t)

    {

        s1.push(t);

    }

    

    //取出s2栈顶的元素,并移除。

    T front()

    {

        if(s2.empty())

        {

            if(s1.size()==0)

                throw;

            while(!s1.empty())

            {

                s2.push(s1.top());

                s1.pop(); //取出不要漏掉移除栈顶元素

            }

        }

        

        int value = s2.top();

        s2.pop();

        return value;

    }

    

    //s1的内容倒入s2

    void pop()

    {

        if(s2.empty())

        {

            while(!s1.empty())

            {

                s2.push(s1.top());

                s1.pop();

            }

        }

    }

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值