一、栈逆序
void Move_bottom_top(stack<int>&s)//把栈底元素移动到栈顶位置
{
if (s.empty())
{
return;
}
int top1 = s.top();
s.pop();
if (!s.empty())
{
Move_bottom_top(s);
int top2 = s.top();
s.pop();
s.push(top1);
s.push(top2);
return;
}
s.push(top1);
}
void Reverse(stack<int>&s)//栈逆转
{
if (s.empty())
{
return;
}
Move_bottom_top(s);
int top = s.top();
s.pop();
Reverse(s);//递归处理子栈
s.push(top);
}
二、栈排序
void Move_max_top(stack<int>&s)//把最大的数弄到栈顶位置
{
if (s.empty())
{
return;
}
int top1 = s.top();
s.pop();
if (!s.empty())
{
Move_max_top(s);
int top2 = s.top();
if (top1 < top2)
{
s.pop();
s.push(top1);
s.push(top2);
return;
}
}
s.push(top1);
}
void Sort(stack<int>&s)
{
if (s.empty())
{
return;
}
Move_max_top(s);
int top = s.top();
s.pop();
Sort(s);//递归处理子栈
s.push(top);
}