数据结构-栈逆序

时间:2019-11-27
本文章向大家介绍数据结构-栈逆序,主要包括数据结构-栈逆序使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

案例三:
实现一个栈的逆序,但是只能用递归函数和这个栈本身的操作来实现,而不能自己申请另外的数据结构(from直通bat)

回忆视频中调用过程的图示分析,加强理解!!

public int get(Stack<Integer> stack){
    int result = stack.pop;
    if(stack.isEmpty()){
        return result;
    }else{
        int last = get(stack);
        stack.push(result);
        return last;
    }
}//该函数功能为,移除栈底元素并返回

public void reverse(Stack<Integer> stack){
    if(stack.isempty()){
        return ;
    }
    int i = get(stack);
    reverse(stack);
    stack.push(i);
}
//get方法为,把栈底元素删除并返回功能。
//以上代码为,把栈中元素逆序的主方法。
View Code

重新理解递归:

流程是什么,递归思路(分治思路)。
递归的确是把大问题化成小问题,但是在化的过程中牵涉到一种分治的思想。
终止条件:什么情况下问题不需要划分了。
如何理解递归行为?系统上如何实现?
一开始,主函数。
我的这个参数指望着我的子过程给我返回。
递归函数就是系统在帮你压栈的理解:
函数所有信息压到栈里(跑到第几行,所有参数和变量),然后调用子过程,之前的过程全在栈里。
怎么接着跑?拿出栈顶函数的所有信息(还原现场)接着跑,参数接住了子过程的返回值。
逻辑概念上的解释,系统上的实现,递归函数不是玄学,递归函数是有实际落地的结构的。
一个函数调用子过程之前会把自己的所有过程全部压到栈里去,信息完全保存;
子过程返回之后,会利用这些信息彻底还原现场,继续跑;
最后串起来所有子过程,跟父过程通信。
任何递归行为都可以改成非递归。递归变迭代。
用压栈过程去分析。
打到一切牛鬼蛇神!
93-108min-初级班1

原文地址:https://www.cnblogs.com/SUMaywlx/p/11941633.html