2つのスタックのみを使用して、1つの順序付きスタックを反転します.


Aスタックはデータ秩序を保存し、スタックトップが最小要素であると仮定し、Bスタックは空のスタックであり、現在は他のデータ構造を使用せず、定数空間を開き、Aスタックのデータを反転することができる.(楽要素筆記試験)
分析:実は絶えずデータをAからBに倒して、それからBからAに倒します;まずAの上の要素をBに押し込み、Aの中の上の要素を一時変数に弾き出し、Bの中の要素をAに弾き出し、次に一時変数をBに押し込み、Aの中に押し込んだばかりの要素をBに押し込む.このようにAのすべての要素に対してこのように操作し、Aが空であることを知って、最後にBの中の要素をすべてAに押し込めばよい.
コードは次のとおりです.
//  [11/11/2013 qingezha]    ,A               ,  B   
//	     2  ,        , A     
//      A       B,   A      ,         ,   B          A,  
//      B,       A        ,  B,     A  ,   B       A  
void rever_stack(stack<int> &a,stack<int> &b)
{
	if (a.empty())
	{
		return;
	}
	else 
	{
		int min = a.top();
		b.push(min);
		a.pop();
		while(!a.empty())
		{
			int tempa=a.top();
			a.pop();
			while(!b.empty())
			{
				int tempb =  b.top();
				b.pop();
				a.push(tempb);
			}
			b.push(tempa);
			while(a.top()>=min)
			{
				int tempc = a.top();
				a.pop();
				b.push(tempc);
			}
		}
		while(!b.empty())
		{
			int temp = b.top();
			b.pop();
			a.push(temp);
		}
	}
}