zoukankan      html  css  js  c++  java
  • 20182334 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结

    20182334 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结

    教材学习内容总结

    本周学习了栈的数组表达和链表表达和队列的数组表达和链表表达,无论是数组还是链表,都离不开一个接口,叫做ADT:

    public interface StackATD<T>
    {
        public void push(T element);
        
        public T pop();
        
        public T peek();
        
        public boolean isEmpty();
        
        public int size();
        
        public String toString();
    }
    
    public interface List<T> {
    
        public void add( T element);
        
        public T delete();
        
        public T first();
        
        public boolean isEmpty();
        
        public int size();
        
        public String toString();
    }
    
    

    这两段代码起到中枢作用,承接栈的所有方法,也联系着测试代码。

    同样在队列中也是如此,需要同样的接口。


    栈相当于做电梯,先进的人后出,后进的人先出;队列就相当于我们一般的排队,先排的人先走,后排的人后走。


    还学习了时间复杂度,在我理解看来,时间复杂度就是观察代码中有几层循环,有几层循环就有几个n,最后得到结果。

    在学习过程中,关于队列用数组形式表达出来会出现查找问题,那这时候会出现不知道如何找到,这里我接触到也学到了哨兵这一知识点,并了解其作用。

    教材学习中的问题和解决过程

    • 问题1:老师介绍的时间复杂度我还是没有搞透。

    • 问题1解决方案:自己搜索资料发现一篇博客一套图 搞懂“时间复杂度”,在这篇博客里讲的很详细,例如常见的四种时间复杂度:O(1)、O(logn)、O(n)、O(n^2),究竟谁用的时间更长,谁更节省时间?

    • 问题2:还是没搞懂泛型到底是用来干啥的。

    • 问题2解决方案:找博客java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一,这篇博客讲的很详细,我读了一遍后,大致有了一些明白:就是在命令行输入数据时,有可能前后输入两次的数据类型不同,这时在运行编译时会报错,很崩溃,那这时候泛型就体现出它的作用,可以提前定义一种类型,当在敲代码的过程中出现两种不同的类型时,会显示错误,这时就可以及时并准确的改正,带来方便;并且在方法里很多数据也都是用泛型定义的,在我理解看来是具有很强的灵活性,当时String时整体都是String,当是Int时整体都是Int。

    • 问题3:在用后缀表达式计算表达式时,会出现疑问,为什么(3 * 4 - ( 2 + 5 )) * 4 / 2 转化为后缀表达式时是3 4 * 2 5 + - 4 * 2 / 而不是 3 4 * 2 5 + - 4 2 / * 。

    • 问题3解决方案:问了老师,同时自己也思索了一会,才明白计算机和人不一样,计算机是按照顺序一个一个输入输出的,而人是用自己一眼看过去觉得最简单的方法计算的,所以会产生差异。

    • 问题4:在栈里插入元素不是很清楚用链表怎么查,总会出现指针后的数据全部丢失。

    • 问题4解决方案:关于这一问题,老师上课也讲到了,首先让新元素的next指向链表目的head,之后再让head指向新元素,这时候把所有元素都保留下来了,也没出现我所说的丢失数据的情况。

    代码调试中的问题和解决过程

    • 问题1:在下图中,用泛型定义的数组在实例化时出现问题。

    • 问题1解决方案:在 仔细研究了泛型之后,发现在整个实例化之前加T[]就可以使数组实例化,很神奇,也让我学到了。

    • 问题2:在IDEA里用文件写入我又忘记了。
    • 问题2解决方案:上网找资料并且找之前打过的代码,发现以下代码:
          try {
    //将集合数据写入磁盘
                FileWriter fw = new FileWriter("D:\IDEAAAA\untitled5\Week8\List_practice\title.txt");
                for (String s : list) {
                    fw.write(s);
                    fw.write("
    ");
                }
                fw.close();
    
    //读取磁盘上文件数据
                BufferedReader br = new BufferedReader(new FileReader("D:\IDEAAAA\untitled5\Week8\List_practice\title.txt"));
                String line;
    
    //将读取到的数据写入到list集合中
                List<String> list1 = new ArrayList<String>();
                while ((line = br.readLine()) != null) {
                    list1.add(line);
                }
                //StringBuilder sb = new StringBuilder();
                String pp = "";
                /*while ((pp = br.readLine()) != null) {//逐行读取文件内容,不读取换行符和末尾的空格
    
                    sb.append(pp +"
    ");
                }*/
    //循环输出list集合
    
                String s = list1.toString();
                pp = s.substring(1,s.length()-1);
                //System.out.println(pp);
                br.close();
    
    

    以上代码是读写都有,主要是FileWriter、BufferedReader、substring这些方法的含义都忘记了,所以又重新打开JDK API 找各种方法。

    • 问题3:在从文件读入的过程中,不知道如何将char类型转化为Int类型。

    • 问题3解决方案:试了试强转换,在数据前加了Int,但是0会变成49,还是不行,这时我 再上网找,发现要是加个 -'0' 则会变成1,可能是在char类型中直接运算会直接变成char类型。

    • 问题4:在做排序时,出现很大问题,因为是用链表做,有很多不懂得地方。

    • 问题4解决方案:先放图:

    上面这张图是冒泡排序,和C语言差不多,整体框架都是一样的,有两个循环不同的是,这个是链表,而C语言是数组,我感觉,链表要比数组难很多,毕竟当时没有学链表,所以现在感觉有一点吃力,但当全部学完之后,回过头发现自己的努力没有白费。用链表实现的具体方法是:利用head、next和data将所有元素连接起来,形成一个链,一定注意链表里的元素数据要交换一定要找第三个变量,并且要用同类型的,不能混用,否则一定报错,吃过很多亏。

    代码托管

    上周考试错题总结

    上周无考试

    点评过的同学博客和代码

    • 本周结对学习情况
      • 20182321

      • 结对照片

      • 结对学习内容

        • 共同完成Android实验操作
        • 共同解决书上出现的问题。
    • 上周博客互评情况

    其他(感悟、思考等)

    java和数据结构的学习强度已经超过我最开始的想象了,看来我还是低估了他俩合起来的威力。老师最开始说有没有信心打6000行代码,我觉得打20000行都有可能。96学时将上一届学长学姐学的内容全部讲完还要全部消化,这本来就是很大的挑战,再加上自己充实的自学时间,让自己把所有时间都用在了java上,感觉很亏,但不得不学。总感觉学校安排的课程有问题,自己完全不能接受关于java的排课,真的接受不了。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 212/212 2/2 17/17
    第二周 132/344 2/4 17/34
    第三周 689/1033 1/5 23/67
    第四周 664/1697 2/7 20/87
    第五周 586/2283 2/9 20/107
    第六周 500/2783 1/10 26/133
    第七周 2143 /4928 2/12 40/173
    • 计划学习时间:29小时

    • 实际学习时间:40小时

    • 改进情况:不妥协,死磕到底!

    参考资料

  • 相关阅读:
    C#中sizeof的用法
    C#托管堆对象实例包含什么
    C#引用类型转换的几种方式
    C#中结构(struct)的部分初始化和完全初始化
    C#值类型装箱后能改变其值吗
    C#程序集系列13,如何让CLR选择不同版本的程序集
    C#程序集系列12,C#编译器和CLR如何找寻程序集
    C#程序集系列11,全局程序集缓存
    C#程序集系列10,强名称程序集
    C#程序集系列09,程序集签名
  • 原文地址:https://www.cnblogs.com/cistineup/p/11774421.html
Copyright © 2011-2022 走看看