zoukankan      html  css  js  c++  java
  • 【栈】仅用递归函数和栈操作逆序一个栈

    题目:

      一个栈依次压入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;
    }

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

  • 相关阅读:
    【转】Linux平台上用C++实现多线程互斥锁
    【转】用C++实现多线程Mutex锁(Win32)
    【转】ACM国内外OJ网站大集合
    【转】常用 blas 函数
    浏览器插件检查
    自定义事件
    JavaScript对象继承方式与优缺点
    如何页面减少重绘回流
    CSS3特效(3)——环形进度条
    CSS3特效(2)——文字特效
  • 原文地址:https://www.cnblogs.com/Atanisi/p/7507258.html
Copyright © 2011-2022 走看看