【题目】​

一个栈依次压入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

如何仅用递归函数和栈操作逆序一个栈相关推荐

  1. 如何仅用递归函数和栈操作逆序一个栈——你要先用stack实现,再去改成递归——需要对递归理解很深刻才能写出来...

    /**  * 如何仅用递归函数和栈操作逆序一个栈  * 题目:  * 一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1.  * 将这个栈转置后,从栈顶到栈底为1,2,3,4, ...

  2. Python:如何仅用递归函数和栈操作逆序一个栈

    如何仅用递归函数和栈操作逆序一个栈 题目: 一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1. 将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序, ...

  3. 编程3:仅用递归函数和栈操作逆序一个栈

    <?php header("content-type:text/html;charset=utf-8"); /** 仅用递归函数和栈操作逆序一个栈 P8*/function ...

  4. 栈和队列之仅用递归函数和栈操作逆序一个栈

    import java.util.Stack;/*** recursion 递归的意思* @author chenyu* 题目:仅用递归函数和栈操作逆序一个栈,列如一次压入1.2.3.4.5 栈顶到栈 ...

  5. 用递归函数和栈操作逆序一个栈

    以下代码实现的是用递归函数和栈操作逆序一个栈. import java.util.Stack;public class GetAndRemoveLastAndReverse {public stati ...

  6. 栈与队列3——用递归和栈操作逆序一个栈

    题目 一个栈依次压入1,2,3:此时栈顶到栈底元素分别为:3,2,1:将栈反转,使得栈顶到栈底元素为:1,2,3,仅限递归函数,并且不能使用其他数据结构 思路 使用两个函数reverse和getAnd ...

  7. function 多个函数用一个_用递归函数和栈逆序一个栈

    实现栈中元素的逆序,而且只能用到递归,不能使用其他的数据结构. 1 栈和递归 栈是先进后出,后进先出的数据结构.使用两个递归函数来实现: 1.将栈底元素返回并返回.每次递归进入下一层,直到栈为空时,返 ...

  8. 左神算法:用递归函数和栈逆序一个栈(Java版)

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

  9. 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | 引入线程安全概念 )

    文章目录 一.引入线程安全概念 二.完整代码示例 一.引入线程安全概念 在上一篇博客 [C 语言]字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序字符串操作 | strncat 函数 ) ...

最新文章

  1. potplayer 多个进程_操作系统进程与线程基本概念理解
  2. linux网页跳转代码,自动识别PC与移动网页跳转代码
  3. Python学习笔记:Day 9 编写API
  4. k8s查看pod的yaml文件_K8S系列学习,Pod实战那些事儿,有必要知道知道
  5. 漫画 | 如何凭实力炒老板鱿鱼,并喜提N+1~
  6. 大一计算机上机试题2017,2017历年全国计算机二级ACCESS上机试题及答案
  7. 【Flink】Flink的窗口触发器 PurgingTrigger
  8. 30秒Python轻松入门-目录
  9. 雷电模拟器 脚本_精灵盛典辅助雷电模拟器使用教程
  10. 算法知识点——(5)集成算法—GBDT详解
  11. 计算机应用基础教学改革参考文献,计算机考试论文,关于计算机等级考试计算机应用基础教学改革相关参考文献资料-免费论文范文...
  12. 网站小图标 (favicon) 的正确设置
  13. c语言二维数组学习,C语言学习之二维数组的传参
  14. 【游戏】Win 10 运行红色警戒2
  15. 计算机开机后屏幕和键盘不亮,电脑开机显示器不亮键盘也不亮怎么回事
  16. centos7 查看multipath服务状态是start condition failed,/etc/multipath.conf was not met
  17. 《科比传》留下深刻印象的文字
  18. cmd.exe启动参数详解
  19. java 庖丁解牛api_重磅|庖丁解牛之——Flutter for Web
  20. 香港大学计算机科学排名,香港大学计算机专业排名

热门文章

  1. 工作中用的linux命令
  2. 用STM32实现:摄像头扫到二维码后提取二维码中的信息分别放到数组中
  3. MySql入门知识(一)
  4. Netty和RPC框架线程模型分析
  5. 泰迪熊移动实现数据化人工智能 打造服务助理
  6. 阿里七层流量入口 Tengine硬件加速探索之路
  7. 实践作业4:Web测试实践(小组作业)每日任务记录3
  8. linux中yum命令详解
  9. 红帽集群套件RHCS四部曲(维护篇)
  10. [笔试面试][code_by_hand]输出第二个字符串在第一个字符串中的连接次序