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

news/2024/11/23 2:47:23/

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

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方法,直到栈为空。即:在递的过程中,将栈底元素都收集好了,并且顺序由前往后正好是倒序。

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

在这里插入图片描述

f函数:

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

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

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

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

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

在这里插入图片描述


http://www.ppmy.cn/news/280175.html

相关文章

UE4_UE5全景相机

分享一个全景相机插件&#xff0c;可直接用于渲染全景视频、制作全景体验场景等使用。 一、分别提供了从UE4.25到UE5的版本 二、以及有各种业务场景下的使用教程视频 三、提供多个Map案例可参考使用 四、其中&#xff0c;最关键的就是Camera_point_360和Camera_rec_360的结合使…

Vue3 + Photo-sphere-viewer 全景

Photo Sphere Viewer是一款基于Three.js的360X180度全景图预览js插件。该js插件可以360度旋转查看全景图&#xff0c;也可以上下180度查看图片。使用该插件的唯一要求是浏览器支持canvas或WebGL。 这只是一个简单的全景图&#xff0c;我们还可以在全景图上面不同位置添加标注&a…

photo-sphere-viewer 全景图Vr 720全景查看(vue篇)

一、安装以及引入方式 npm install photo-sphere-viewer/core /***插件安装**/ npm install photo-sphere-viewer/markers-plugin npm install photo-sphere-viewer/gallery-plugin npm install photo-sphere-viewer/autorotate-plugin二、PhotoSphereViewer.vue <templat…

Unity 制作360全景视频 全景图片流程

Recorder的使用 在Unity制作360图片或者视频需要用到UnityPackage:Recorder 如果没有就在Package Manager寻找 1、在菜单栏找到Window/General/Recorder/RecorderWindow 参数说明: Animation Clip&#xff1a;录制动画剪辑 Movie&#xff1a;录制视频 Image Sequence&a…

vue实现vr看360°全景效果

1&#xff1a;首先创建一个vue的基础项目 vue create demo 2&#xff1a;启动并打开项目 3&#xff1a;在生成的public文件夹下找到Index.html&#xff0c;然后在script标签中引入three.js <script src"https://cdn.jsdelivr.net/npm/three0.93.0/build/three.min.js&…

4K高清视频素材,拿去不谢。

推荐几个高清视频素材网站&#xff0c;重点是可以免费下载&#xff0c;还可以商用&#xff0c;记得收藏哦&#xff01; 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库是一个素材量非常大得网站&#xff0c;站内不仅有非常多高清视频素材之外&#x…

Vue使用photo-sphere-viewer360°×180°全景插件模拟VR看房、房间切换

近两年随着VR的火热&#xff0c;市面上也出现了很多购房和二手房软件小程序出现了VR看房功能&#xff0c;实现足不出户就能亲身体验&#xff0c;那么类似这样的功能是怎么实现的呢&#xff1f; 今天阿七就和大家一起来学习一下360180全景插件photo-sphere-viewer和他的插件&am…