zoukankan      html  css  js  c++  java
  • 左神算法书籍《程序员代码面试指南》——1_03如何使用递归函数和栈操作逆序一个栈

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

    【题解】
    使用两个递归函数:
    一个递归函数是将栈底的元素返回并删除
    另一个函数是将返回的元素进行存入

    【代码】

     1 #pragma once
     2 #include <iostream>
     3 #include <vector>
     4 #include <stack>
     5 
     6 using namespace std;
     7 
     8 //【题目】
     9 //一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。
    10 //将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,
    11 //但是只能用递归函数来实现,不能用其他数据结构。
    12 //
    13 //【题解】
    14 //使用两个递归函数:
    15 //一个递归函数是将栈底的元素返回并删除
    16 //另一个函数是将返回的元素进行存入
    17 
    18 int getBottomData(stack<int>&s)
    19 {
    20     int res = s.top();
    21     s.pop();
    22     if (s.empty())
    23         return res;//将栈底元素弹出
    24     else
    25     {
    26         int last = getBottomData(s);
    27         s.push(res);//重新压回数据
    28         return last;    //
    29     }
    30 }
    31 
    32 void reversStack(stack<int>&s)
    33 {
    34     if (s.empty())
    35         return;
    36     int a = getBottomData(s);
    37     reversStack(s);
    38     s.push(a);
    39 }
    40 
    41 void printStack(stack<int>s)
    42 {
    43     while (!s.empty())
    44     {
    45         cout << s.top() << " ";
    46         s.pop();
    47     }
    48     cout << endl;
    49 }
    50 
    51 void main()
    52 {
    53     stack<int>s;
    54     s.push(1);
    55     s.push(2);
    56     s.push(3);
    57     s.push(4);
    58     s.push(5);
    59     printStack(s);
    60     reversStack(s);
    61     printStack(s);
    62 }
  • 相关阅读:
    内存映射的原理
    Intel 面试(就不该报外企,英语是硬伤)
    基于多进程和基于多线程服务器的优缺点及nginx服务器的启动过程
    pdflush机制
    百度面试
    同步IO和异步IO的区别
    阿里面试
    linux内核学习之四:进程切换简述
    static成员函数不能调用non-static成员函数
    C/C++函数调用方式
  • 原文地址:https://www.cnblogs.com/zzw1024/p/11170439.html
Copyright © 2011-2022 走看看