如何仅用递归函数和栈操作逆序一个栈
【题目】
一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他的数据结构。
【解答】
首先分为两步。第一步,得到栈底元素并移除这个栈底元素;第二步,将得到的栈底元素逆序入栈。
【代码】
1 package cn.hl.p3; 2 3 import java.util.Stack; 4 5 /** 6 * title:一个栈依次压入1、2、3、4、5, 7 * 那么从栈顶到栈底分别为5、4、3、2、1。 8 * 将这个栈转置后,从栈顶到栈底为1、2、3、4、5, 9 * 也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他的数据结构。 10 * 11 * @author 猩生柯北 12 */ 13 14 public class suanfa { 15 /** 16 * 将栈stack的栈底元素返回并移除 17 * @param stack 18 * @return 19 */ 20 public static int getAndRemoveLastElement(Stack<Integer> stack){ 21 //弹出栈顶元素 22 int result = stack.pop(); 23 //判断 24 //弹出元素后如果栈为空,则返回该元素 25 if(stack.isEmpty()){ 26 return result; 27 }else{ 28 //不为空时,则递归。此时栈为原栈弹出栈顶元素后的一个变化的栈。 29 //当递归到栈底元素时,将栈顶元素返回并赋值给变量last 30 int last = getAndRemoveLastElement(stack); 31 //递归结束。将除栈底元素的其他元素按原先顺序依次入栈。 32 //此时的栈与原栈的区别是:栈底元素被移除 33 stack.push(result); 34 //返回原栈底元素 35 return last; 36 } 37 } 38 39 /** 40 * 逆序一个栈。 41 * @param stack 42 */ 43 public static void reverse(Stack<Integer> stack){ 44 //判断。 45 if(stack.isEmpty()){ 46 return; 47 } 48 //得到栈底元素 49 int i = getAndRemoveLastElement(stack); 50 //递归。此时的栈是原栈返回并移除栈底元素的一个变化栈。 51 reverse(stack); 52 //递归结束。递归到栈空时,将得到的栈底元素依次(注意顺序!!!)入栈。 53 stack.push(i); 54 } 55 56 //测试.入栈元素依次为:5,7,9. 57 public static void main(String[] args) { 58 Stack s1 = new Stack(); 59 s1.push(5); 60 s1.push(7); 61 s1.push(9); 62 System.out.println("The elements in the original stack:"); 63 for( int i=0 ; i <= s1.size()+1; i++ ){ 64 System.out.println(s1.pop()); 65 } 66 67 s1.push(5); 68 s1.push(7); 69 s1.push(9); 70 reverse(s1); 71 System.out.println("==================================="); 72 System.out.println("The elements in the changed stack:"); 73 for( int i=0 ; i <= s1.size()+1; i++ ){ 74 System.out.println(s1.pop()); 75 } 76 } 77 } 78
【运行结果】
转载于:https://www.cnblogs.com/zhzcode/p/9574375.html
如何仅用递归函数和栈操作逆序一个栈相关推荐
- 如何仅用递归函数和栈操作逆序一个栈——你要先用stack实现,再去改成递归——需要对递归理解很深刻才能写出来...
/** * 如何仅用递归函数和栈操作逆序一个栈 * 题目: * 一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1. * 将这个栈转置后,从栈顶到栈底为1,2,3,4, ...
- Python:如何仅用递归函数和栈操作逆序一个栈
如何仅用递归函数和栈操作逆序一个栈 题目: 一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1. 将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序, ...
- 编程3:仅用递归函数和栈操作逆序一个栈
<?php header("content-type:text/html;charset=utf-8"); /** 仅用递归函数和栈操作逆序一个栈 P8*/function ...
- 栈和队列之仅用递归函数和栈操作逆序一个栈
import java.util.Stack;/*** recursion 递归的意思* @author chenyu* 题目:仅用递归函数和栈操作逆序一个栈,列如一次压入1.2.3.4.5 栈顶到栈 ...
- 用递归函数和栈操作逆序一个栈
以下代码实现的是用递归函数和栈操作逆序一个栈. import java.util.Stack;public class GetAndRemoveLastAndReverse {public stati ...
- 栈与队列3——用递归和栈操作逆序一个栈
题目 一个栈依次压入1,2,3:此时栈顶到栈底元素分别为:3,2,1:将栈反转,使得栈顶到栈底元素为:1,2,3,仅限递归函数,并且不能使用其他数据结构 思路 使用两个函数reverse和getAnd ...
- function 多个函数用一个_用递归函数和栈逆序一个栈
实现栈中元素的逆序,而且只能用到递归,不能使用其他的数据结构. 1 栈和递归 栈是先进后出,后进先出的数据结构.使用两个递归函数来实现: 1.将栈底元素返回并返回.每次递归进入下一层,直到栈为空时,返 ...
- 左神算法:用递归函数和栈逆序一个栈(Java版)
题目描述 一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1.将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数 ...
- 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | 引入线程安全概念 )
文章目录 一.引入线程安全概念 二.完整代码示例 一.引入线程安全概念 在上一篇博客 [C 语言]字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | strncat 函数 ) ...
最新文章
- potplayer 多个进程_操作系统进程与线程基本概念理解
- linux网页跳转代码,自动识别PC与移动网页跳转代码
- Python学习笔记:Day 9 编写API
- k8s查看pod的yaml文件_K8S系列学习,Pod实战那些事儿,有必要知道知道
- 漫画 | 如何凭实力炒老板鱿鱼,并喜提N+1~
- 大一计算机上机试题2017,2017历年全国计算机二级ACCESS上机试题及答案
- 【Flink】Flink的窗口触发器 PurgingTrigger
- 30秒Python轻松入门-目录
- 雷电模拟器 脚本_精灵盛典辅助雷电模拟器使用教程
- 算法知识点——(5)集成算法—GBDT详解
- 计算机应用基础教学改革参考文献,计算机考试论文,关于计算机等级考试计算机应用基础教学改革相关参考文献资料-免费论文范文...
- 网站小图标 (favicon) 的正确设置
- c语言二维数组学习,C语言学习之二维数组的传参
- 【游戏】Win 10 运行红色警戒2
- 计算机开机后屏幕和键盘不亮,电脑开机显示器不亮键盘也不亮怎么回事
- centos7 查看multipath服务状态是start condition failed,/etc/multipath.conf was not met
- 《科比传》留下深刻印象的文字
- cmd.exe启动参数详解
- java 庖丁解牛api_重磅|庖丁解牛之——Flutter for Web
- 香港大学计算机科学排名,香港大学计算机专业排名