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

来源:互联网 发布:淘宝助理安卓手机版5.7 编辑:程序博客网 时间:2024/06/05 19:11

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

代码:

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);//递归,长度减1s.push(m);//将第二次取栈顶操作得到的数压入栈}};


0 0
原创粉丝点击