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

    题目:

     解题思路:

    记住递归内部就是一个栈,写两个递归就能实现队列,即将12345,入栈之后出栈还是12345。

    这里是第一个递归实现获取栈底元素,然后再使用第二个递归,实现反转。

     1 /* 递归函数1: 将栈stack的栈底元素返回并移除 */
     2 static int getAndRemoveLastElement(stack<int> data)
     3 {
     4     int result = data.pop();
     5     if (data.empty() )
     6     {
     7          return result;    
     8     }      
     9     else 
    10     {
    11          int last = getAndRemoveLastElement(data);
    12          data.push(result);
    13          return last;    
    14     }
    15 }    
    16 
    17 public:
    18      /* 递归函数2: 逆序一个栈,就是题目要求实现的方法 */
    19      void reverse( stack<int>  data)
    20     {
    21          if (data.empty() )
    22          {
    23               return;      
    24          }
    25          int i = getAndRemoveLastElement(data);
    26          reverse(data);
    27          data.push(i);
    28     }      

     

     getAndRemoveLastElement方法在图中简单表示为get方法,表示移除并返回当前栈底元素。

  • 相关阅读:
    Codeforces 959 E Mahmoud and Ehab and the xor-MST
    LightOj 1336 Sigma Function
    某考试 T1 sigfib
    [BOI2007] Sequence
    UOJ 41. 矩阵变换
    [BOI2007] Mokia
    SPOJ 26108 TRENDGCD
    bzoj3545: [ONTAK2010]Peaks
    bzoj3910: 火车
    bzoj1185: [HNOI2007]最小矩形覆盖
  • 原文地址:https://www.cnblogs.com/Tavi/p/12505452.html
Copyright © 2011-2022 走看看