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

Posted walxt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一题 为了工作 2020 0305 第三题相关的知识,希望对你有一定的参考价值。

/**
* 问题:
* 如何仅适用递归函数和栈操作逆序一个栈
* 一个栈依次压入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 第三题的主要内容,如果未能解决你的问题,请参考以下文章

每日一题 为了工作 2020 0325 第二十三题

每日一题 为了工作 2020 0315 第十三题

每日一题 为了工作 2020 0406 第三十五题

每日一题 为了工作 2020 0405 第三十四题

每日一题 为了工作 2020 0502 第六十一题

每日一题 为了工作 2020 0303 第一题