3.4化栈为队列

     《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及解释。
     算法用两个STL的 s t a c k stack stack实现了一个队列。当向队列中添加元素时,将元素入栈到 n e w E s t newEst newEst栈中,该栈的栈顶永远是最近添加的元素。当向队列中取元素时,从 o l d E s t oldEst oldEst栈的栈顶取元素,该栈的栈顶是最久之前添加的元素。当 o l d E s t oldEst oldEst栈为空时,将 n e w E s t newEst newEst栈中的每一个元素(从栈顶开始)逐个出栈后并入栈到 o l d E s t oldEst oldEst栈,这样就保证了 o l d E s t oldEst oldEst栈中栈顶为较早之前进入队列的元素而栈底是较后进入到队列的元素,这样就保证了队列先进先出的原则。

class MyQueue
{
    private:
	    stack<int> newEst;
		stack<int> oldEst;
    public:
		MyQueue()
	    {
			newEst= stack<int>();
			oldEst= stack<int>();
	    };

	    void shiftStacks()
	    {	    
			if (oldEst.empty())
			{
				while (!newEst.empty())
				{
					oldEst.push(newEst.top());
					oldEst.pop();
				}
			}
	    };
		//Add value to the queue//
	    void addValue(int value)
	    {
			newEst.push(value);
	    };

	    int size() 
	    {
	    	return newEst.size()+ oldEst.size();
	    };
		// Remove the top element of queue.//
	    void remove() 
	    {
			shiftStacks();
			oldEst.top();
	    };
		// Retun the top element of queue.//
	    int peek() 
	    {
			shiftStacks();
	    	return oldEst.top();
	    };
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qqssss121dfd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值