利用两个队列实现栈---进栈和出栈

根据两个队列实现一个栈,    大致思路与我上篇博客 ---> 根据两个栈实现一个队列  类似


所以直接贴出代码:

//两个队列实现一个栈, 思路 与 两个栈实现一个队列基本类似(我发过博客)


#include <queue>
#include <windows.h>
using namespace std;


template <typename T>
class MyStack
{
public:
	MyStack( )
	{}

	~MyStack( )
	{}

	void Push( const T& data )						//除了构造析构, 这些函数你别忘了返回值哈.
	{
		q1.push( data );
	}

	void Pop( )
	{
		if ( true == Empty( ) )
			throw new exception( "栈为空!\n" );

		if ( false == q1.empty( ) )				//false!!!  Not flase!
		{
			while ( 1 != q1.size( ) )
			{
				q2.push( q1.front( ) );

				q1.pop( );
			}

			q1.pop( );
		}
		else
		{
			while ( 1 != q2.size( ) )
			{
				q1.push( q2.front( ) );

				q2.pop( );
			}

			q2.pop( );
		}
	}

	bool Empty( )
	{
		if ( true == q1.empty( ) )
			if ( true == q2.empty( ) )
				return true;

		return false;
	}

private:
	queue<T> q1;
	queue<T> q2;
};


void TestMyStack( )
{
	MyStack<int> s;

	s.Push( 1 );
	s.Push( 2 );
	s.Push( 3 );
	s.Push( 4 );

	s.Pop( );

	s.Push( 5 );
	s.Push( 6 );

	s.Pop( );
	s.Pop( );
	s.Pop( );
	s.Pop( );
	s.Pop( );
}

int main( )
{
	TestMyStack( );

	system( "pause" );
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值