• 0507数据结构


    1.实现一个链表的逆置

    • 方法一:尾插逆置,用两个指针,q,r,r用于标记原来链表的末尾,q用于标记尾插后的结点,每次将头结点的下一个结点尾插到链表结尾,直到L的下一个结点为s,就完成了对链表的逆置。
    • 方法二:头插法逆置,用两个指针p,q,p指针标记每次头插的结点,q指针指向待逆置的结点,每次将q指针指向的结点头插到链表中,直至q指向的结点为空则完成链表的逆置。

    2.递归的含义,递归能不能替代循环,递归是怎么实现的

    • 递归即函数自身调用自身,本质上是自上而下解决问题,将大问题解决成小问题。递归有两个基本要素,即边界条件和递推关系。
    • 递归与循环各有优缺点,递归的思路清晰代码实现简单,但递归的实现需要用到栈,每一次递归都需要用栈保存参数、返回地址和临时变量,同时会造成很多的重复计算,比如斐波那契数列的递归算法,同时当数字很大时还可能会造成栈溢出。而循环则更高效,结构简单,但是对于有些问题,使用循环会比递归更加复杂,比如二叉树的前中后序遍历。
    • 递归的实现:递归通过栈实现,需要将每一层的变量状态等压入栈中,直到满足边界条件,再返回其父方法执行。
    • 想到中断嵌套,但是递归和中断嵌套是不一样的概念,中断嵌套是系统在遇到更高优先级的中断提出请求时,会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断服务程序继续执行,这个过程就是中断嵌套。
    • 中断处理的流程:首先,每一个中断都被进行了编号,即中断向量,不同的中断向量对应不同的中断处理程序。当程序执行完当前的每一条指令之后,都会区检查由没有中断请求,如果有,就在相应的脉冲到来之前读取中断向量,通过中断向量查看优先级,找对应的栈等(参考https://www.cnblogs.com/aaronLinux/p/10842499.html),然后保存当前程序的现场,跳到中断服务程序处理中断,当中断服务程序执行完毕后,恢复先前中断的程序。

    3.斐波那契数列算法,使用递归和迭代方法的区别

    • 斐波那契额数列的应用:有一段楼梯有10级台阶,规定每一步只能跨一级或两级,要登上第10级台阶有几种不同的走法?

    这就是一个斐波那契数列:登上第一级台阶有一种登法;登上两级台阶,有两种登法;登上三级台阶,有三种登法;登上四级台阶,有五种方法……所以,1235813……登上十级,有89种。

    • 斐波那契数列公式  F(n)=F(n-1)+F(n-2)(n>2) F(0)=0  F(1)=1 F(2)=1
    • 算法思想:采用递归方式的话效率很低,因为会有很多重复计算,可以采用迭代的方法,根据F(0)和F(1)计算出F(2),以此类推,可以计算出第n项,时间复杂度为O(n),(用long long数据类型,否则数字大时精度不够)
     1 long long Fibo(unsigned n)
     2 {
     3    int result[2]={0,1};
     4    if(n<2)
     5       return result[n];
     6    long long FiboOne=0;
     7    long long FiboTwo=1;
     8    long long FiboN=0;
     9    for(unsigned int i=2;i<n;i++)
    10    {
    11          FiboN=FiboOne+FiboTwo;
    12          FiboOne=FiboTwo;
    13          FiboTwo=FiboN;
    14    }
    15    return FiboN;
    16 }
    View Code
  • 相关阅读:
    关于html5 -- plus Webview模块管理应用窗口界面
    关于html的下载功能
    手机网页远程调试
    Javascript中的”==”和”===”
    遇见——那些觉得有点意思的好网站
    css3基础必回选择器全解
    WEB前端开发CSS基础样式全面总结
    求指导 值类型和引用类型
    实验四
    《构建之法》读后感
  • 原文地址:https://www.cnblogs.com/helloworldToDu/p/12843584.html
Copyright © 2020-2023  润新知