两种操作都是递归实现,汉诺塔思想。
#include<iostream>
#include<stack>
using namespace std;
void reverse(stack<int> &s)//逆序栈
{
if(s.size()==0)
return ;
int a=s.top();
s.pop();
if(s.size()==0)
{
s.push(a);
return ;
}
reverse(s);
int b=s.top();
s.pop();
reverse(s);
s.push(a);
reverse(s);
s.push(b);
}
void Sort(stack<int>&s)//栈顶放大元素
{
if(s.size()==0)
return ;
int a=s.top();
s.pop();
if(s.size()==0)
{
s.push(a);
return;
}
Sort(s);
int b=s.top();
s.pop();
if(a<b)
{
s.push(a);
Sort(s);
s.push(b);
}
else
{
s.push(b);
Sort(s);
s.push(a);
}
}
int main()
{
stack<int>s;
for(int i=0;i<10;++i)
s.push(i);
reverse(s);
Sort(s);
while(!s.empty())
{
cout<<s.top()<<endl;
s.pop();
}
getchar();
return 0;
}
运行结果如下: