用两个栈实现一个队列 & 用两个队列实现一个栈

本文探讨如何使用两个栈来模拟一个队列,以及如何用两个队列实现一个栈。入队操作元素压入栈s1,出队时若s2为空则将s1元素转移至s2,然后从s2出队。同样,获取队首元素不删除。另外,介绍了两队列如何模拟栈的思路。
摘要由CSDN通过智能技术生成

         队列(先进先出)和栈(先进后出)都是常用的经常讨论的基本的数据结构,本文要讨论的是一对有趣的问题:如何用两个栈(队列)实现一个队列(栈),下面将分别说明,并附示例代码。

        1、用两个栈实现一个队列

         基本思路:初始有两个空栈s1和s2,当入队列是,将元素加入s1,而出队列则从s2出,当然s1与s2之间存在一定的交互。

  • 入队:元素压入栈s1即可。
  • 出队:首先看s2是否为空,若s2为空,则依次弹出s1的元素,加入s2中;若不为空,则不需额外处理;之后弹出s2中的栈顶元素(即为队列的首元素)删除即可。
  • 获得队首元素:与出队操作类似,区别只是在最后弹出s2中的栈顶元素(即为队列的首元素)并返回而不删除。
        代码实现以及简单的测试代程序如下:
/*用栈实现队列的功能:
*要用到两个栈,一个用于入队列,一个用于出队列
* by F8Master
*FileName: QueueByStack.cpp
*/

#include <stack>
#include<iostream>
using namespace std;

template<class T>
class MyQueue
{
public:
	MyQueue(){};
	~MyQueue(){};
	void push(T &ite
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值