您的位置:首页 > 编程语言 > C语言/C++

【C语言】递归实现栈的逆序及排序

2015-11-29 15:40 561 查看
一、栈逆序

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: