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

1 篇文章 0 订阅
1 篇文章 0 订阅

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

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

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

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

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

用到了STL模板库。

#include <stack>
#include <iostream>
using namespace std;
//利用两个栈,实现入队操作
//stack s1,负责入队操作,stack s2,负责出队操作
int EnQueue(stack<int> &s1,int data)
{
	s1.push(data);
	return 0;
}
//出队操作
int  DeQueue(stack<int> &s1,stack<int> &s2)
{
	int p;//用于存储栈顶元素
	//当放回false时,说明不为空
	//当s2不为空时,先弹出s2中的元素
	if (false==s2.empty())
	{
		int &data=s2.top();
		p=data;
		cout<<"弹出元素为"<<p<<endl;
		s2.pop();
		return 0;
	}
	//当s2中为空时,把s1中的元素全都压到s2中,再弹出s2中的元素
	if (true==s1.empty())
	{
	cout<<"There is no data in the Queue!"<<endl;
	}
	
	while (false==s1.empty())
	{
		int &data=s1.top();
		p=data;
		s2.push(p);
		s1.pop();
	}
	int &data=s2.top();
	p=data;
	cout<<"弹出元素为"<<p<<endl;
	s2.pop();
	return 0;
}
int main()
{
	stack<int> s1,s2;
	for (int i=1;i<=10;i++)
	{
		EnQueue(s1,i);
	}
	for (int i=1;i<=10;i++)
	{
		DeQueue(s1,s2);
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值