20172301 《程序设计与数据结构》第四周学习总结

20172301 《程序设计与数据结构》第四周学习总结

教材学习内容总结

  • 列表:列表集合没有内在的容量大小,它可以随着需要而增大。

    • 有序列表:列表中元素有内在关联,直接定义了元素之间的顺序。
    • 无序列表:元素按着使用者所选择的任意方式排序
    • 索引列表:元素可以用索引来引用。
  • 实现Serializable接口。目的是为了某个对象能使用串行化进行存储。 该接口中没有任何方法,只是表明该对象可以转换为串行化表示形式。
  • Josephus问题是适合用索引列表来求解的计算问题。这类问题着眼于,当列表中的事件不是按顺序取出而是按每隔i个元素提取,直到一个不剩,如何找到这些事件的顺序。
  • 使用数组实现列表:要把列表的一端固定在索引0处,设置一个整数变量rear表示列表中的元素数目,同时表示列表末端的下一个可用位置。
    • remove操作:查找作为参数传递的元素,找到就从列表中将其删除。
    • contains操作:在这种情况下需要n个比较操作。方法平均需要n/2次比较操作,因而该操作的复杂度为O(n)。
    • add操作:有序列表中需要进行n次比较和平移操作,操作的复杂度为O(n)。无序列表中addToFront需要平移n-1个元素,操作复杂度为O(n)。addToRear操作复杂度为O(1)。addAfter需要比较和平移n次,操作复杂度为O(n)
  • 使用链表实现列表:
    • remove操作:链表实现的不需要平移元素来填补空隙。但是在最坏的情况下,需要进行n次比较操作的情况,确定目标不再列表中,因此其时间复杂度也为O(n)。

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

  • 问题1:书P93 链表和列表的具体区别。列表是不是就是线性表。
  • 问题1解决方案:
    • 首先,注意,这里的链表不同于我们所学习的物理结构链式结构,它是一种线性表。
    • 列表则是一种线性表集合,使事物以线性列表的方式进行组织。简单来说,按顺序排好的元素集合就是表。 列表也可以使用链表或数组来进行实现。列表有三种类型:有序列表,无序列表,索引列表。
    • 线性表有两种存储结构:顺式存储结构、链式存储结构。
    • 所以,由此可见,列表对于链表应该是一种包含关系。不确定列表与线性表的关系。
  • 问题2:索引链表和数组的区别是什么?不应该是容量么?书上P95 的坍塌是应该如何理解。
  • 问题2解决方案:
    • 书上给出索引列表的概念

      索引列表为它的元素维护一段连续的数字索引值。

      然后书上说

      索引列表和数组的根本区别在于:索引列表的索引值总是连续的。

    • 先不说这句话如何理解,但是我觉得索引列表和数组的根本区别就是容量。数组申请空间之后大小就固定了。而列表的空间容量是可以动态增长的。
      而因为数组的容量是固定的,所以导致使用数组的时候造成空间的浪费。当你增加元素达到数组填满了的时候,如果不开辟新的空间,则无法继续增加元素。所以数组该设置多大是一个需要解决的问题,但有时候你无法确定到底需要多大的数组来存储一个大小在变化的表。解决的其中一个办法是当发现数组满,申请一个新的更大的数组,然后将元素全部移至新的数组。但怎么处理掉原数组也是一个问题。
      所以这时候,才会有列表的出现。
    • 而书上所指的 “坍塌”,根本指的是使用数组解决问题是增加删除元素的效率。 插入或删除某个元素,则其对应位置后的所有元素均需移动。这所需要的时间复杂度会增加。
  • ...

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

  • 问题1:书P103 代码中的instanceof的意义和具体用法
  • 问题1解决方案:
    • 首先,根据上下文的理解,先给出我的一个初见。应该是判断两个对象类型是否一样的一种方法
    • 然后,查询API发现并没有这个方法。之后我便理解了。因为,instanceof是Java的一个二元操作符(运算符),也是Java的保留关键字。 它不是一个方法或类,就没有体现在API中。
    • 它的作用是判断其左边对象是否为其右边类的实例,返回的是boolean类型的数据。用它来判断某个对象是否是某个Class类的实例。
    • 注意:null值不是任何对象的实例, 所以下面这个例子返回了false,无论这个变量声明的是什么类型。
    String s = null;
    if ( s instanceof String )   
    • instanceof也可以正确的报告一个对象是否是数组和特定的接口类型。
    if ( foo instanceof byte[] )

代码托管

上周考试错题总结

第三四章

  • 错题1:Inherited variables and methods can be used in the derived class as if they had been declared locally.
    A .true
    B .false
  • 错因:我认为父类的变量如果声明成private,那么子类是不可以直接调用的。所以我觉得是错的。
  • Common features should be located as low in a class hierarchy as is reasonable, minimizing maintenance efforts.
    A .true
    B .false
  • 错因:公共变量为了方便调用,应该声明在最高的层次。

    第五章

  • The first operation removes an element at the front of the queue and returns a reference to it.
    A .True
    B .False
  • 错因:这题我翻译错了,应该是first操作,我看成第一个操作了。尴尬。

结对及互评

点评过的同学博客和代码

其他

  • 十一的假期让我们可能有些许懈怠,不过磨刀不误砍柴工。适当的放松可以更好地学习。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 10/10
第二周 610/610 1/2 20/30
第三周 593/1230 1/3 18/48
第四周 300/1300 2/5 30/78

参考资料

原文地址:https://www.cnblogs.com/gk0625/p/9751884.html

时间: 2024-08-29 17:16:09

20172301 《程序设计与数据结构》第四周学习总结的相关文章

2014025635(09)《嵌入式程序设计》第三,四周学习总结

1.第三四周学习情况 本周学习进度不慢,上课也能跟着老师敲代码了,老师说一些指令也知道是什么意思了,这两周我认为非常重要的快捷键就是tab键,补全代码,我自己手敲肯定出现很多错误,必须Tab键!!!!!!!!!!!!!!! 2.1实验楼学习内容 2.1.1安装arm-linux-gcc交叉编译工具 先复制链接到剪切板上,保存关闭剪切板 输入wget命令,然后再复制粘贴,就可以将交叉编译工具下载到实验楼环境 2.1.2.解压缩交叉编译工具源码 解压缩后生成的目录是gcc-3.4.6-glibc-2

201521123116 《java程序设计》第十四周学习总结

1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. ①关系型数据库的定义:使用表(table)来存储数据:使用行(row)区分不同- 记录,每行代表一条记录:每一行由若干列(column,字段)组成. ②在JDBC中释放资源时,按照ResultSet.Statement.Connection的顺序依次关闭. ③JDBC编程一般步骤 1.与数据库建立连接(Connection) 2.向数据库发送SQL语句(statement) 3.获得和处理查询或更新语句返回的

201671010119 2016-2017-2《Java程序设计》第十四周学习心得

本周老师对第十一章事件处理进行了重点讲解 ,讲解之前老师先在PPT上放了几道题目,对我们自己学习十一章进行了一个随堂测验.通过这次随堂测验,我觉得我看书还是不够仔细,有些该注意的细节没有注意到.通过测验,我知道了属于容器的组件有JPanel:paintComponent方法有一个Graphics类型的参数:在类中若要处理ActionEvent事件,则该类需要实现的接口是:ActionListener:容器通过方法setLayout()设置某种布局.在课后我也找到了这些知识点,结合举例,使我对这些

201621123014《Java程序设计》第十四周学习总结

1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计. 答:将原来存放在文件中的数据存放到数据库中:从借书方面来看,要建立学生表students和书表books. 2.2 系统中使用到了JDBC中什么关键类? 答:使用了JDBC的DriverManager.Connection.Statement.ResultSet等类. 2.3 截图数据库相关模块的关键

201671010130 2016-2017-2 《Java程序设计》第十四周学习小结

模型(model):用于存储数据的对象. 视图(view):为模型提供数据显示的对象. 控制器(controller):处理用户的交互操作,对于用户的操作作出响应,让模型和视图进行必要的交互,即通过视图修改.获取模型中的数据:当模型中的数据变化时,让视图更新显示. 在网格布局对象的构造器中,需要指定行数和列数:panel.setLayout(new GridLayout(x,y)); 消息对话框的创建 javax.swing包中的JOptionPane类的静态方法: public static

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

20172301 2017-2018-2 <程序设计与数据结构>第4周学习总结 教材学习内容总结 第四章 类与对象的关系,类是对象的蓝图. UML类图的使用 封装的有关概念.(可见性修饰符:public private protected) return语句. 形参和实参 局部数据和实例数据 第七章 软件开发的步骤(确定软件需求,软件设计,实现软件设计,软件测试) 静态变量和静态方法 类间关系(依赖关系,聚合关系...) this的用法.常在构造方法中出现. 接口(Comparable接口,I

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

20172301 2017-2018-2 <程序设计与数据结构>第十周学习总结 教材学习内容总结 集合:是一个对象. 同构和异构:取决于集合保存的是否是类型全部都相同的对象. ArrayList由于其多态性,所以可以存储任何类型的对象,是异构 线性数据结构: 队列: 先进先出 堆栈: 后进先出 非线性数据结构: 树:由一个根节点和构成层次结构的多个节点组成. 内部节点:除根节点外的所有节点 叶节点:没有子节点的节点(就是在周围两边的节点) 树的结构从上到下,根节点在顶层,叶节点在底层 二叉树:

20172304 《程序设计与数据结构》第四周学习总结

20172304 <程序设计与数据结构>第四周学习总结 教材学习内容总结 第六章主要介绍了列表,这个列表是一种概念上的笼统的定义. 列表包括链表和数组. 列表分为:有序列表,无序列表,索引列表. 有序列表 其元素按照元素的某种内在特性进行排序. 无序列表 其元素件不具有内在顺序,元素按照他们在列表中的位置进行排序 索引列表 其元素可以用数字索引来引用 有序列表和无序列表在插入式有区别,有序列表需要做到插入之后还是有序的.而无序列表不是这样的.而索引列表虽然可以通过索引进行插入,删除操作,但是还

20172301 《程序设计与数据结构》第六周学习总结

20172301 <程序设计与数据结构>第六周学习总结 教材学习内容总结 树的概述 树由一个包含结点和边的集构成. 树(一种非线性结构,其中的元素被组织成一个层次结构) 结点:树中的一个位置. 边:树中两个结点的连接. 根结点:就是指位于该树顶层的唯一结点.一棵树只有一个根结点,根结点没有父节点. 子结点:一个树中较低层的结点是上一层结点的子结点.位于树中当前结点下面的结点,并由边与之直接连接. 同胞结点:属于同一结点的子结点. 叶结点:没有任何子结点的结点. 内部节点:一个至少有一个子结点的