2つのスタックのみを使用して、1つの順序付きスタックを反転します.
Aスタックはデータ秩序を保存し、スタックトップが最小要素であると仮定し、Bスタックは空のスタックであり、現在は他のデータ構造を使用せず、定数空間を開き、Aスタックのデータを反転することができる.(楽要素筆記試験)
分析:実は絶えずデータをAからBに倒して、それからBからAに倒します;まずAの上の要素をBに押し込み、Aの中の上の要素を一時変数に弾き出し、Bの中の要素をAに弾き出し、次に一時変数をBに押し込み、Aの中に押し込んだばかりの要素をBに押し込む.このようにAのすべての要素に対してこのように操作し、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);
}
}
}