博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何仅用递归函数和栈操作逆序一个栈
阅读量:4095 次
发布时间:2019-05-25

本文共 1146 字,大约阅读时间需要 3 分钟。

【题目】

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

【难度】

两星

【解答】

本题我们要实现两个递归函数——getAndRemoveLastElement,reverse

  1. getAndRemoveLastElement(Stack<Integer> stack)的作用是移除并返回栈底元素
  2. reverse(Stack<Integer> stack)函数实现栈的逆序   

递归的思想就是把问题的规模由大变小, 但是解决问题的方法不变。

一.我们先来讲第二个函数reverse,reverse需要借助第一个函数getAndRemoveLastElement:

递归思想:

  1. 先调用gerAndRemoveLastElement弹出并取得栈底元素value
  2. 然后调用reverse对少了一个元素的栈进行逆序处理
  3. 最后把value压入栈, 就实现了栈元素的逆序

递归终止条件:

    我们调用reverse的参数stack的规模不断缩小, 直到栈空,说明元素都移了出来, 此时返回, 就会一个一个元素压回去

【实现代码】

public static void reverse(Stack
stack) { if(stack.isEmpty()) { return; }else { int value = getAndRemoveLastElement(stack); reverse(stack); stack.push(value); } }

二. getAndRemoveLastElement

  1. 弹出并返回栈底元素, 我们用递归的思想来解决这个问题:
  2. 我们先弹出栈顶元素value
  3. 然后弹出并返回少了一个元素的栈的栈底元素
  4. 最后把value压入栈顶

递归终止条件:

    不断调用getAndRemoveLastElement, 其参数stack的规模不断减小, 弹出最后一个元素时栈空, 说明最后一个元素就是栈底元素, 返回即可。

【实现代码】

public static int getAndRemoveLastElement(Stack
stack){ int value = stack.pop() if(stack.isEmpty()){ return value; } int result = getAndRemoveLastElement(stack) stack.push(value); return result;}

转载地址:http://ohaii.baihongyu.com/

你可能感兴趣的文章
c++输入文件流ifstream用法详解
查看>>
c++输出文件流ofstream用法详解
查看>>
字符编码:ASCII,Unicode 和 UTF-8
查看>>
c++ 发邮件(含附件)
查看>>
Window设置Wifi热点的脚本
查看>>
telnet实现简单的邮件发送
查看>>
dos编程详解
查看>>
程序员的职业规划
查看>>
c++ 实现python的split,strip函数
查看>>
c++使用Eigen库计算矩阵特征值
查看>>
VS调试时查看动态数组的全部元素
查看>>
ls -l 每一列的含义
查看>>
安装广告拦截插件abp
查看>>
python处理打卡数据的excel表格
查看>>
Linux虚拟机与本地机共享文件夹
查看>>
[JS] 格式化时间长度(formatDuration)
查看>>
[JS] 变量提升
查看>>
[JS] 检查一个对象是否可迭代
查看>>
Java访问类中的私有成员(private member)
查看>>
输出一个集合所有子集的元素和(Print sums of all subsets of a given set)
查看>>