码迷,mamicode.com
首页 > 其他好文 > 详细

每日一题 为了工作 2020 0305 第三题

时间:2020-03-05 13:04:20      阅读:45      评论:0      收藏:0      [点我收藏+]

标签:int   调用   rgs   结果   result   imp   添加元素   ast   打印   

/**
* 问题:
* 如何仅适用递归函数和栈操作逆序一个栈
* 一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,
* 从栈顶到栈底为5、4、3、2、1,也就是实现了栈中元素的逆序,但是只可以通过递归函数来实现。
* 分析:
* 本题目考验查找操作和递归函数的设计,我们需要设计出两个递归函数。
* 函数一:将栈stack中的栈底元素返回并移除
* getAndRemoveLastElement()
* 函数二:逆序一个栈
* @author 雪瞳
*
*/

* 递归

递归需要满足两个条件:

1.反复调用自身。

2.有跳出反复调用的出口。

import java.util.Stack;

public class TransStack {
        //将stack栈中的栈底元素返回并移除
        public static int getAndRemoveLastElement(Stack<Integer> stack) {
            //将栈顶元素输出并删除,将结果存在result中
            int result = stack.pop();
            if(stack.isEmpty()) {
                return result;
            }else {
                //递归调用直到调用至可以获得result,即可以将栈底元素返回
                int last = getAndRemoveLastElement(stack);
                stack.push(result);
                return last;
            }
        }
        //逆序一个栈
        public static void reverseStack(Stack<Integer> stack) {
            if(stack.isEmpty()) {
                return;
            }
            int i = getAndRemoveLastElement(stack);
            //此时的stack和传入的形参之间相差一个栈底元素
            reverseStack(stack);
            stack.push(i);
        }
        public static void main(String[] args) {
            //创建栈对象
            Stack<Integer> stack = new Stack<>();
            //向栈内添加元素
            for(int i=1;i<=5;i++) {
                stack.push(i);
            }
            TransStack test = new TransStack();
            test.reverseStack(stack);
            test.printCallStack(stack);
        }
        
        //打印栈中元素
        public static void printCallStack(Stack<Integer> stack) {
            if(stack.isEmpty()) {
                return;
            }else {
                int result = stack.pop();                
                printCallStack(stack);
                System.out.println(result);
            }        
        }
            
}

 

每日一题 为了工作 2020 0305 第三题

标签:int   调用   rgs   结果   result   imp   添加元素   ast   打印   

原文地址:https://www.cnblogs.com/walxt/p/12419549.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!