美文网首页
尚硅谷Java数据结构韩顺平老师课程存在问题汇总

尚硅谷Java数据结构韩顺平老师课程存在问题汇总

作者: ethaaa | 来源:发表于2021-09-10 22:22 被阅读0次

    一、说明

    是韩顺平老师的数据结构,有不少问题,我看到总结一下

    二、大问题

    涉及知识性错误的问题

    p14 环形队列:
    课件和图都是错误的,环形队列的指针指向要存放的空位,不是最后一个元素,而是最后一个元素再后面的空位,并且,队列必须空出一个位置不存放数据,这样才能区分队列空和队列满两种情况。建议自己网上找一张环形的队列图参考着来

    p33 栈实现综合计算器:
    课件对实现逻辑的描述有问题,而且代码写错了。错误点:

    “如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,再从符号栈中pop出一个符号,进行运算,将得到结果,入数栈,然后将当前的操作符入符号栈”

    这里表述有问题,从符号栈中pop出一个符号是不够的,要一直pop,直到符号栈的操作符的优先级大于栈顶元素或者栈为空,不信的话可以用以下语句对老师的代码进行测试:

    10-4*2+3*8

    p66 快速排序:
    非常不推荐看老师的思路和代码,和网上主流的解释和思路完全不同,最好看网上的思路,
    不让贴链接,我自己看的叫坐在马桶上学算法讲的快排,挺清楚的,有需要我可以单独开一贴
    思路都是正确的,就是最后的代码实现有个,小问题:

    //顺序很重要,要先从右边开始找
        while(a[j]>=temp && i=temp 不应该有等于=
    

    (ps:其实不影响运行结果,但是算是小瑕疵,不影响的原因是:如果加了=,一开始就会忽略掉=的情况继续往左边走,但是无所谓,因为其余地方都是对的,也就是这个被忽略的元素由于和pivot相同,所以在比pivot大的右边的分组里,这个元素肯定是最小的(值就是pivot),所以一定会被排在pivot的左边,也就是:【比pivot小】【pivot】【比pivot大】,其中【比pivot大】分组的最左边,也就是和【pivot】相邻)

    p69 归并排序
    时间复杂度讲的不对,时间复杂度就是2log2(n),不是n-1

    p84 斐波那契数列查找
    代码实现有问题,如下做出更改和说明,那一段老师也没讲为什么。而且还有,前面老师的代码,能用arr.length-1就不要用high,high是会变的指针,一开始用只是因为high还没开始变而已,不推荐这样用,会混淆概念,边界就是边界,指针就是指针(不是c那个,就是标识的指针)

    else { //找到
                    //需要确定,返回的是哪个下标
                    //因为数组被扩充过,要防止数组mid跑到arr.length以上
                    //【错误!】不能用high,high被改过,要用arr.length-1
    //              if(mid <= high) {
    //                  return mid;
    //              } else {
    //                  return high;
    //              }
                    if(mid <= arr.length-1) {
                        return mid;
                    } else {
                        return arr.length-1;
                    }
    

    p119 数据压缩-生成赫夫曼编码表
    老师创建了一个 static StringBuilder stringBuilder = new StringBuilder();
    为什么要创建一个成员变量呢,有的人担心stringBuilder 每次用完不清空不会重复吗,事实上,这个确实多余了,这里的stringBuilder 只用于初始化用,可以不需要创建,直接在函数调用时,把这个stringBuilder 换成一个new StringBuilder()就可以了。

    三、难点问题解释

    代码不够简洁之类的问题

    p80 归并排序
    老师对于二分排序的完善功能,就是binarySearch2,用于找出所有内容的函数,当mid正好是findVal时,往两边扫描,扫描的边界是0和arr.length,值的边界一定是left和right,因为上一个函数递归进来的时候,
    比如是binarySearch2(arr, left =mid+1 , right = right, findVal),就已经说明mid值不是findVal了。老师写法更加准确,这个范围时用来限制越界的,不是限制值的范围,值的范围肯定是left和right之间

    相关文章

      网友评论

          本文标题:尚硅谷Java数据结构韩顺平老师课程存在问题汇总

          本文链接:https://www.haomeiwen.com/subject/wuanwltx.html