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

    【说明】  

      本文是左程云老师所著的《程序员面试代码指南》第一章中如何仅用递归函数和栈的操作逆序一个栈这一题目的C++复现;

      本文只包含问题描述、C++代码的实现以及简单的思路,不包含解析说明,具体的问题解析请参考原书;

      感谢左程云老师的支持。

    【题目】:

      一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1.将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序。

    【要求】:

      只能用递归函数实现,且数据结构只能使用栈。

    【思路】:

      取出栈底元素后,将栈进行逆序,最后将取出的栈底元素压入到栈顶。

    【编译环境】:

      CentOS6.7(x86_64)

      gcc 4.4.7

    【实现】:

      实现+测试代码

    /*
     *文件名:restack.cpp
     *作者:
     *摘要:使用递归的方法逆序一个栈
     */
    
    #include <iostream>
    #include <stack>
    using namespace std;
    
    int popLast(stack<int> &s)
    {
        int tmp = s.top();
        s.pop();
        if(s.empty())
            return tmp;
        else
        {
            int last=popLast(s);
            s.push(tmp);
            return last;
        }
    }
    
    void reStack(stack<int> &s)
    {
        if(s.empty())
            return ;
        int tmp = popLast(s);
        reStack(s);
        s.push(tmp);
        return ;
    }
    
    int main()
    {
        stack<int> s;
        int a[]={1,2,3,4,5};
        int i;
        for(i=0;i<5;i++)
            s.push(a[i]);
        cout << "Before Reverse:" << endl;
        for(i=0;i<5;i++)
        {
            cout << s.top() << endl;
            s.pop();
        }
        for(i=0;i<5;i++)
            s.push(a[i]);
        reStack(s);
        cout << "After Reverse:" << endl;
        for(i=0;i<5;i++)
        {
            cout << s.top() << endl;
            s.pop();
        }
        return 0;
    }
    View Code

    注:

      转载请注明出处;

      转载请注明源思路来自于左程云老师的《程序员代码面试指南》。

  • 相关阅读:
    新学期随笔——脚踏实地
    买书方案
    课程总结和建议
    梦断代码阅读笔记03
    梦断代码阅读笔记02
    构建之法阅读笔记06
    【洛谷5284】[十二省联考2019] 字符串问题(后缀树优化建边)
    【BZOJ3514】Codechef MARCH14 GERALD07加强版(LCT_主席树)
    【BZOJ1487】[HNOI2009]无归岛(仙人掌 DP)
    【洛谷3239_BZOJ4008】[HNOI2015] 亚瑟王(期望 DP)
  • 原文地址:https://www.cnblogs.com/PrimeLife/p/5316220.html
Copyright © 2011-2022 走看看