• 【栈】仅用递归函数和栈操作逆序一个栈


    题目:

      一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序。但是只能用递归函数来实现,不能用其他数据结构

    题解:

    需要两个递归函数:1. 将栈底元素返回并删除;2. 逆序一个栈

    过程即为获取栈底元素,逆序2、3、4、5,递归后获取栈底元素2,逆序3、4、5,再次递归获取栈底元素3,逆序4、5,再次递归获取栈底元素4,逆序5,最后获取栈底元素5, 逆序空栈。依次返回插入获取的栈底元素,也就是依次插入5、4、3、2、1;

    Solution 1

    #include<iostream>
    #include<stack>
    using namespace std;
    
    int getBottomElement(stack<int> &s) {
        int cur = s.top();
        s.pop();
        if (s.empty()) {
            return cur;
        } else {
            int bottom = getBottomElement(s);
            s.push(cur);
            return bottom;
        }
    }
    void reverse(stack<int> &s) {
        if (s.empty()) {
            return;
        } 
        int bottom = getBottomElement(s);
        reverse(s);
        s.push(bottom);
    }
    int main()
    {
        int n, num;
        cin >> n;
        stack<int> s;
        for (int i = 0; i < n; ++i) {
            cin >> num;
            s.push(num);
            cout << num << " ";
        }
        cout << endl;
        reverse(s);
        while (!s.empty()) {
            cout << s.top() << " ";
            s.pop();
        }
        cout << endl;
    
        system("pause");
        return 0;
    }

    注意此程序我是先顺序输入栈元素,调用逆序函数后逆序输出栈元素,所以输出结果相同。

  • 相关阅读:
    【JAVA】遍历打印目录结构
    Java多线程设计模式(2)
    MBTI职业性格测试你注定是个程序员?
    基于RMI的即时通讯工具的设计与实现
    你在中国有去过那些地区?
    Java多线程设计模式(4)
    学习Unix/Linux编程要学些什么
    在Ubuntu上用Vbox装XP遇到的几个问题
    Java多线程设计模式(3)
    软件架构发展史
  • 原文地址:https://www.cnblogs.com/Atanisi/p/7507258.html
Copyright © 2020-2023  润新知