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