您的位置:首页 > 其它

重造轮子 用递归函数和栈操作逆序一个栈

2015-10-19 19:53 387 查看
目标:仅使用递归与栈操作将栈逆序。
方法:有点利用回溯法的味道。在递归操作中做两次取栈顶元素的操作后,并将第一次取得的栈顶元素再入栈。这个操作可以将原栈中最顶部的元素压入栈底。当递归函数返回时,再将另一个取栈顶操作获得的元素压入栈。然后在对从栈顶到次栈底这一段元素调用上诉操作。


代码:

class Solution{
public:
void reverseStack(stack<int>& s){//逆序栈
if(s.empty())
return;
int len = s.size();
while(len>1){//当栈内可逆序长度为1时,则栈已经完成逆序过程
reverse(s,len);
len--;
}
while(!s.empty()){//打印逆序后的栈,这里栈也变空了
cout<<s.top()<<endl;
s.pop();
}
}
void reverse(stack<int>& s,int len){
if(len == 1) return;
int n,m;
n = s.top();//第一次取栈顶元素
s.pop();//栈顶出栈
m = s.top();//第二次取栈顶元素
s.pop();//栈顶出栈
s.push(n);//将第一次取栈顶操作得到的数压入栈
reverse(s,len-1);//递归,长度减1
s.push(m);//将第二次取栈顶操作得到的数压入栈
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: