20172332 2017-2018-2 《程序设计与数据结构》第十周学习总结

20172332 2017-2018-2 《程序设计与数据结构》第十周学习总结

教材学习内容总结

  • 1.集合与数据结构。
    • 同构:集合保存的类型全部相同的对象。
    • 异构:集合可以保存各种类型的对象。
    • 集合可以用各种方式实现。(集合抽象数据类型可以互换的等同概念)
  • 2.数据结构的动态表示。
    • 动态数据结构用链来实现。(其大小是在使用时动态确定的,而不是在声明时静态确定的)
    • list永远是头节点,头节点不能变,先去判断头节点是否为空,然后再用指针.next去判断下一个是否为空,再进行下一步操作。
    • 删除或者添加节点时,需要注意不要让链表断掉,所以就要注意先后的操作步骤。
    • 除了单向链表外还有双向链表,双向链表中每个节点不仅含有一个指向后一节点的引用,而且还有一个指向前一节点的引用。双向链表使得在链表节点间向前、向后访问节点更加容易,但建立和修改操作比较复杂。
    • 链表的另一种实现是在链表中增加一个头节点,头节点类与引用的Node类不是相同的类。(看图的话就感觉是把首尾相连起来了。)
    • 链表的实现有多种方案。
  • 3.线性数据结构。
    • (1)队列。
      • 类似于列表,不同之处是队列的元素存取方式有限制。(先进先出的存取方式FIFO
      • 实际的实现方法是队列的前端随着元素取出队列而移动。(说白了就是队列前端在移动而不是元素在移动。)
      • 典型的操作:①入队——在队尾添加一个元素;②出队——从队首移出一个元素;③检测空队列——如果队列为空,返回true
    • (2)堆栈。
      • 类似于队列,差别在于堆栈元素在堆栈的同一端进入和移出堆栈,最后一个进入堆栈的元素是第一个移出堆栈的元素。(先进后出的存取方式)
      • 典型的操作:①入栈——将一个元素压入栈顶;②出栈——从栈顶移出一个元素;③读栈顶——从栈顶获取元素,但并不将该元素移出栈顶;④检测空堆栈——如果堆栈为空,返回true
      • API的java.util包中的Stack类就是实现堆栈数据结构的。
      • 一个在堆栈中搜索指定对象的方法。Stack类的search方法返回一个整型数,表示所搜索的制定对象在堆栈中的位置。
      • 任何对象都可以压入堆栈,如果是基本类型的数据,则必须先用相应的包装类将数据封装为对象。
  • 4.非线性数据结构。
    • (1)树
      • 一个根节点和构成层次结构的多个节点组成。除根节点外的所有节点称为内部节点,没有子节点的节点称为叶节点。
      • 由上而下,根节点在顶层,叶节点在底层。
      • 在一棵二叉树上,每个节点不能有超过两个的子节点。从技术上说,二叉树只是普通树的子集,但是二叉树在计算领域中非常的重要,以至于人们常将二叉树本身视为一种数据结构。
      • 树和二叉树的操作有所不同,但至少两者都包括了添加节点和删除节点的操作。两者都能以引用作为动态链来很好地实现。
      • 静态表示方式实现树数据结构也是可能的。
    • (2)图
      • 图没有类似于树根节点那样的初始入口点。
      • 在一个图中,一个节点到另一个节点的连接称为边,连接一个图内各节点的边数一般没有限制。
      • 在一个普通的图中,边是双向的;在一个有向的图中,每条边只有特定的方向。
      • 与树类似,虽然也可以用数组实现图,但更常用动态链实现图。
  • 5.Java集合类API。
    • Java标准类库中定义了几种表示不同类型集合的类,常称为Java集合类API。
    • 在这组类中,大多数的类名表明了集合类型及其基本实现方法。
    • 泛型:一个集合所管理的对象的类型要在实例化该集合对象时才确定。(就可以理解为,集合本身没有类型,是在使用时才赋予的类型。)
    • 集合所能存放的对象与继承关系有关。(意思就是集合是父类的类型,但是子类也可以放进集合中。)

教材学习中的问题和解决过程(数据结构具体的都是下学期学,现在只是简单的了解,也不知道自己哪有问题)

代码调试中的问题和解决过程(这周的两个pp和之前的小测试非常的类似,没有什么问题)

代码托管

上周考试错题总结

1.Why is the following method one which has infinite recursion?

    public int infiniteRecursion(int n)
    {
     if (n > 0) return infiniteRecursion(n) + 1;
     else return 0;
    }
  • A . Because there is no base case
  • B . Because the base case will never be true
  • C . Because the recursive call does not move the parameter closer to the base case
  • D . Because the recursive call moves the problem further away from the base case
  • E . None of the above, there is no infinite recursion in this method
  • 答案:C ;我选的:D
  • 分析:自身参数n递归,n无变化,肯定是无限递归。
  • 单词:1.infinite:无限。

2.Consider the following recursive sum method:

        public int sum(int x)
        {
         if (x = = 0) return 0;
         else return sum(x - 1) + 1; 
        }

If the base case is replaced with "if (x = = 1) return 1;" the method will still compute the same thing.

  • A . true
  • B . false
  • 答案:B ;我选的:A
  • 分析:如果用参数< 0调用,则原始方法会导致无限递归,但如果用任何参数>=0调用,则可以正常工作。使用新的基础情况,如果调用任何参数> 1,该方法就可以正常工作,但是如果参数< 1,则会导致无限递归。因此,和(0)现在不同于以前。(这里指的是情况相同,而并不是答案相同)
  • 单词:1.recursive:递归。

3.It always is possible to replace a recursion by an iteration and vice versa.

  • A . true
  • B . false
  • 答案:A ;我选的:B
  • 分析:迭代和递归在计算方面是等价的,只是效率和风格等方面具有差异。
  • 单词:1.iteration:迭代。

4.The following method correctly adds two ints, returning their sum:

        public int add(int a, int b)
        {
         return (b > 0) ? add(a+1, b-1) : a;
        }
  • A . true
  • B . false
  • 答案:B ;我选的:A
  • 分析:若b大于0,则该方法对;但若b小于0,则该方法不对,所以没有提前对b进行限制。
  • 单词:无

5.The following method correctly multiplies two ints so long as both are non-negative:

        public int mpy(int a, int b)
        {
         return (b > 0) ? a + mpy(a, b-1) : 0;
        }
  • A . true
  • B . false
  • 答案:A ;我选的:B
  • 分析:乘法只是重复加法,所以重复的加a,b倍,就是两个数的乘积。
  • 单词:无

点评过的同学博客和代码

其他(感悟、思考等,可选)

  • 这周主要都是下学期的内容,这章就是一个导入,更何况老师上课讲了还留了一个小测试,所以没有花费很大的精力。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 182/182 1/1 10/10
第二周 458/640 1/2 15/25
第三周 469/1109 2/4 18/43 学会IDEA的使用和调试,学会jdb调试。
第四周 1536/2645 1/5 24/67
第五周 980/3625 1/6 25/92
第六周 870/4495 1/7 16/108
第七周 455/4950 2/9 22/130
第八周 1322/6272 2/11 28/158
第九周 2/13 28/186
第十周 1/14 16/186
  • 计划学习时间:20小时

  • 实际学习时间:16小时

  • 改进情况:

参考资料

posted @ 2018-05-20 17:33  雲深不知处  阅读(303)  评论(4编辑  收藏  举报