用两个堆栈实现一个列表的功能(主要是入队列和出队列)

面试宝典(第三版),178页,面试例题四

以下的思路是目前看到最优的。

思路:s1是入栈的,s2是出栈的。

  入队列时:直接压入s1即可

  出队列时:如果s2不为空,把s2中的栈顶元素直接弹出;否则,把s1的所有元素全部弹出压入s2中,再弹出s2的栈顶元素

用到了STL模板库。

#include 
#include 
using namespace std;
//利用两个栈,实现入队操作
//stack s1,负责入队操作,stack s2,负责出队操作
int EnQueue(stack &s1,int data)
{
	s1.push(data);
	return 0;
}
//出队操作
int  DeQueue(stack &s1,stack &s2)
{
	int p;//用于存储栈顶元素
	//当放回false时,说明不为空
	//当s2不为空时,先弹出s2中的元素
	if (false==s2.empty())
	{
		int &data=s2.top();
		p=data;
		cout<<"弹出元素为"< s1,s2;
	for (int i=1;i<=10;i++)
	{
		EnQueue(s1,i);
	}
	for (int i=1;i<=10;i++)
	{
		DeQueue(s1,s2);
	}
	return 0;
}



你可能感兴趣的:(队列,栈,数据结构)