18.5:给定一个栈,请逆序这个栈,不能申请额外的数据结构,只能使用递归函数

这篇具有很好参考价值的文章主要介绍了18.5:给定一个栈,请逆序这个栈,不能申请额外的数据结构,只能使用递归函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

给定一个栈,请逆序这个栈,不能申请额外的数据结构,只能使用递归函数

package algorithmbasic.class18;

import java.util.Stack;

//给定一个栈,请逆序这个栈,不能申请额外的数据结构,只能使用递归函数
public class ReverseStackUsingRecursive {

    public static void reverse(Stack<Integer> stack) {
        if (stack.isEmpty()) {
            return;
        }
        //拿到栈底元素lowValue。
        int lowValue = f(stack);
        reverse(stack);
        stack.push(lowValue);
    }

    //黑盒:给我一个栈,在保证栈中元素顺序不变的情况下,弹出栈底元素。
    public static int f(Stack<Integer> stack) {
        int result = stack.pop();
        if (stack.isEmpty()) {
            return result;
        }
        int last = f(stack);
        stack.push(result);
        return last;
    }
    
    // -------------------- for test ------------------------
    
    public static void main(String[] args) {
        Stack<Integer> test = new Stack<Integer>();
        test.push(1);
        test.push(2);
        test.push(3);
        test.push(4);
        test.push(5);
        reverse(test);
        while (!test.isEmpty()) {
            System.out.println(test.pop());
        }

    }
}

reverse主函数:

假设我们有一个f方法:可以拿到栈底元素,并保证其他元素栈中顺序不变。

上来就调用f方法,拿到栈底元素 lowValue 。此时stack中栈底元素被拿走了。

这个递归不断的调用f方法,直到栈为空。即:在递的过程中,将栈底元素都收集好了,并且顺序由前往后正好是倒序。

然后归的时候,直接将栈底元素入栈即可。

18.5:给定一个栈,请逆序这个栈,不能申请额外的数据结构,只能使用递归函数

f函数:

f函数的功能是:可以拿到栈底元素,并保证其他元素栈中顺序不变。

首先进入的是第一层,定义两个变量,一个是result:记录当前层的元素,一个是last:记录栈底元素。

将第一层的元素弹出来放到result中,result就是当前层的元素。此时的stack栈顶飞了一个,last = f(stack),继续调用递归

来到第二层,然后继续相同的工作。

一直递归,直至来到栈为空,此时result中记录的就是栈底元素。返回此时的result。来到第二层,此时last接收到返回的栈底元素,并将last返回。因为此时栈是空地,所以,将result压入栈中。然后一致归。

18.5:给定一个栈,请逆序这个栈,不能申请额外的数据结构,只能使用递归函数文章来源地址https://www.toymoban.com/news/detail-508855.html

到了这里,关于18.5:给定一个栈,请逆序这个栈,不能申请额外的数据结构,只能使用递归函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 给wordpress额外添加一个编辑器

    在制作wordpress模板时,有时会用到同一个文章需要分开录入内容,分别调用的情况,这个时候就需要给文章,再添加一个录入额外内容的编辑器。将下面的代码添加到functions.php中,就可以实现。 添加完了后,在录入文章时,就可以显示出来。在此编辑器中录入内容,在需要

    2024年01月21日
    浏览(44)
  • 刷完这个笔记,17K不能再少了....

    大家好,最近有不少小伙伴在后台留言,得准备面试了,又不知道从何下手!为了帮大家节约时间,特意准备了一份面试相关的资料,内容非常的全面,真的可以好好补一补,希望大家在都能拿到理想的薪资和offer! 一般技术面试官都会通过自己的方式去考察你的技术功底与

    2024年02月04日
    浏览(35)
  • Unity中URP下获取每一个额外灯数据

    在上一篇文章中,我们知道了URP下是怎么获取额外灯数量的。 Unity中URP下获取额外灯数量 在这篇文章中,我们来了解一下怎么获取每一盏额外灯的数据。 SimpleLit中调用了 GetAdditionalLight 该函数有三个重载,我们分别称为1号、2号、3号重载,方便后面区分 3号调用了2号 读源码

    2024年01月25日
    浏览(31)
  • 前端算法题——给定一个整数数组,判断是否存在重复元素。

    题目可以理解为如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false。 这题一看就是 计数问题,题目中“如果存在一值在数组中出现至少两次”这句话就告诉我们记录每一个数字出现的次数就能解决问题了。  我们遍历数组时,

    2024年02月20日
    浏览(88)
  • Java 快速判断一个 IP 是否在给定的网段内

    要在 Java 中判断一个 IP地址 是否在给定的网段内,可以使用 子网掩码 将 IP地址 和 子网掩码 进行 与操作 来提取网络地址,并将其与给定的子网地址进行比较。 下面的例子 由强大的 ChatGPT 提供 。 代码如下所示(子网掩码的计算可以截取字符串后,借助底部的算法进行获得

    2024年02月02日
    浏览(61)
  • 要求编写程序,求一个给定的m×n矩阵各行元素之和。

    输入格式: 输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间 以空格分隔。 输出格式: 每行输出对应矩阵行元素之和。 输入样例: 输出样例: 简单的定义二维数组求行的和,注意b[100]={0}的意思

    2024年02月06日
    浏览(82)
  • 3的幂,给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false。

    题记: 给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。 整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3^x 示例 1: 输入 :n = 27 输出 :true 示例 2: 输入 :n = 0 输出 :false 示例 3: 输入 :n = 9 输出 :true 示例 4: 输入 :

    2024年02月15日
    浏览(56)
  • PTA(C语言)本题要求编写程序,求一个给定的m×n矩阵各行元素之和。

    本题要求编写程序,求一个给定的m×n矩阵各行元素之和。 输入格式: 输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间 以空格分隔。 输出格式: 每行输出对应矩阵行元素之和。 输入样例: 输出样例:  

    2024年02月03日
    浏览(43)
  • 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。

    LeetCode第73题矩阵置零 1.思路: 想到一个开辟一点空间来解决方法,使用哈希集。就是使用一个哈希集(row和col)来储存数组中的元素为0的下标。然后再遍历,整个二维数组,在哈希集中存在对应的下标,就将这一行或这一列置为0。 2.代码部分

    2024年02月10日
    浏览(46)
  • 给定一个非负整数a,返回>=a,并且离a最近的,2的某次方(java)

    给定一个非负整数num,如何不用循环语句,返回=num,并且离num最近的,2的某次方 题目交代不能用循环,我们可以用位运算解决这题. 举个例子. 7 的 二进制是 0000 0111 第一步 先减一,n = 0000 0110 第二步,上面减一得到的结果n 或上n 右移一位. n |= n 1; 第三步.n 在 或 n 右移2位. n |=

    2024年02月09日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包