zoukankan      html  css  js  c++  java
  • 算法笔记(c++)-使用递归函数逆序一个栈

    ---恢复内容开始---

                    使用递归函数逆序一个栈


     题目:使用递归函数,不借助其他数据结构逆序一个栈。

    我的思路:使用递归函数保存栈中变量。

      递归函数分两个,一个获取并移除栈底元素,另一个负责逆序。其实俩个递归思路基本一致。

      获取并移除栈底元素的递归结构图如下:

        

      这个结构很清楚了。照着写就是代码了。

      代码如下

      

    int get_and_remove_last(stack<int>& s)
    {
        temp=s.top();
        s.pop();
        if(s.empty())
            return temp;
        else
        {
            last=get_and_remove_last(s);
            s.push(temp);
            return last;
        }
    }

    另一个递归函数思路也很清晰,每次都使用上面的函数取出栈低元素,然后使用递归保存,当栈为空的时候开始放入

    我这里也画下递归示意图,和上面的略微有点差别:

        

     

    代码如下

    void reverse(stack<int> &s)
    {
        int temp=get_and_remove_last(s);
        if(s.empty())
        {
            s.push(temp);
            return;
        }
        else
        {
            reverse(s);
            s.push(temp);
            return;
        }
    }

    我们来检测下代码正确性:

    int main()
    {
        stack<int> s;
        for(int i=0;i<10;i++)
            s.push(i);
        reverse(s);
        while(!s.empty())
        {
            cout<<s.top()<<endl;
            s.pop();
        }
        return 0;
    }

    结果如下:

    正确

  • 相关阅读:
    ESXi 5.5 添加驱动
    .net static 变量
    socket
    .net HttpWebRequest 模拟form提交
    node.js form 上传
    .net Thrift 之旅 (二) TServer
    SVN服务器从Windows迁移到LInux
    如何在windows上安装部署设置SVN服务器
    [Ubuntu]在Ubuntu下搭建自己的源服务器
    Eclipse总是自动关闭
  • 原文地址:https://www.cnblogs.com/DJC-BLOG/p/9360006.html
Copyright © 2011-2022 走看看