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

目录

  • 2019-2020-26 《数据结构与面向对象程序设计》第8周学习总结

    • 教材学习内容总结
    • 教材学习中的问题和解决过程
    • 代码调试中的问题和解决过程
    • 代码托管week13
    • 上周考试错题总结
    • 结对及互评
      • 点评:
      • 点评过的同学博客和代码
    • 其他(感悟)
    • 学习进度条
    • 参考资料

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

教材学习内容总结

  • 链表
  1. 可用对象引用变量来创建链式结构
  2. 链表由对象组成,其中每个对象指向表中的下一个对象
  3. 链表根据需要动态变大,本质上没有容量限制
  4. 修改引用的词序对链表的维护很重要
  5. 处理链表中的第一个结点通常需要特殊处理
  6. 实现带哨兵结点或虚位结点作为第一个结点的表,可以去掉处理第一个结点这种特殊情形
  7. 保存在集合中的对象不能包含所用数据结构的任何实现细节
  8. 使用链表实现栈,有效实现了相关操作的集合的任何一种实现方案都能用来解决问题
  9. 栈的链式实现方案在链表的一端添加和删除元素
  • 查找
  1. 查找是在一组项内找到指定目标或是确定目标不存在的过程
  2. 高效的查找使得比较的次数最少
  3. Comparable接口允许多态实现算法,而不是只应用于特定的类
  • 排序
  1. 二分查找利用了查找池有序的这个特性
  2. 二分查找每次比较都排除了一半的可行候选数据
  3. 排序是按某种标准将一列数据按确定的次序重排的过程
  4. 选择排序算法反复的将一个个具体的值放到它最终的有序位置,从而完成一组值的排序
  5. 插入排序算法反复地将一个个具体的值插入到表的已有序的子表中,从而完成一组值的排序
  6. 冒泡排序算法反复的比较相邻元素,如果必要就交换它们的次序,从而完成一组值的排序
  7. 快速排序算法通过划分表,然后再递归地对两个子表进行排序,从而完成一组值的排序
  8. 归并排序算法递归地将表平分为两部分,直到每个子表中只含有一个元素,然后将这些子表归并为有序表,从而完成一组值的排序
  9. 二分查找有对数阶的复杂度,对于大的查找池来说,这非常有效率
  10. 选择排序,插入排序及冒泡排序的平均运行时间复杂度是O(n2)
  11. 快速排序的关键是选择一个好的划分元素
  12. 归并排序的最差运行时间复杂度是O(n log n)

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

  • 问题1:链表和数组的区别
  • 问题1解决方案:
  1. 区别一:物理地址存储的连续性
    数组的元素在内存中是连续存放的。
    链表的元素在内存中不一定是连续存放的,通常是不连续的。
  2. 区别二:访问速度
    数组的访问速度很快,因为数组可以根据数组可以根据下标进行快速定位。
    链表的访问速度较慢,因为链表访问元素需要移动指针。
  3. 区别三:添加、删减元素速度
    数组的元素增删速度较慢,因为需要移动大量的元素。
    链表的元素增删速度较快,因为只需要修改指针即可。
  • 问题2:什么是交换操作?
  • 问题2解决方案:交换操作是指互换数组中两个元素的位置的过程。几个排序算法中都需要交换两个元素
  • 问题3:Comparable接口对查找及排序算法的实现有何方便之处?
  • 问题3解决方案:此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。
    此接口可以定义任何一个类的对象间的相对次序,根据类的特点实现相应的compareTo方法

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

  • 问题1:选择排序、冒泡排序、插入排序到底分别指什么?
  • 问题1解决方案:冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
    选择排序(Select Sorting):的基本思想是:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R{1}~R[n-1]中选取最小值,与R[1]交换,...., 第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列.
    插入排序(Insertion Sorting):局部有序,先把第一个数据看成一个有序数组,然后把第二个数据插入到这个“有序数组”中,形成具有两个数据的有序数组,依次类推,直至最后一个数据插入到具有 N-1 个数据的有序数组中,完成排序。插入过程:获取当前数据,并标记当前数据与下标,与之前有序数据的最后一个作比较,若小于最后一个数据则将最后一个数据进行后移操作,然后再与倒数第二个数据进行比较,重复刚才的操作,若不小于则终止操作。
    三种排序的比较:其时间复杂度都是O(n^2),但是由于细节比较或是循环问题,速度上体现为:插入排序>选择排序>冒泡排序。

代码托管week13

上周考试错题总结

第八周无考试,无错题

结对及互评

点评:

  • 博客中值得学习的或问题:

    • 对课本,代码进行多方位的思考。
    • 认真寻找自己的不足之处。
    • 举例说明问题。
  • 代码中值得学习的或问题:
  • 基于评分标准,我给本博客打分:14分。得分情况如下:
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 结对学习情况真实可信的加1分
    • 正确使用Markdown语法
    • 模板中的要素齐全(加1分)
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 教材学习中的问题和解决过程, 加5分
    • 代码调试中的问题和解决过程,加2分

点评过的同学博客和代码

  • 本周结对学习情况

  • 上周博客互评情况

其他(感悟)

在java上花的时间更多了,对各种排序有了了解,正在努力记忆中

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 26/200 2/2 7/7
第二、三周 235/327 3/5 15/23
第四周 123/450 2/7 8/31
第五周 850/1300 2/9 9/40
第六周 846/1696 2/11 7/47
第七周 1614/3310 2/13 15/62
第八周 360/3670 1/14 10/72
  • 实际学习时间:10小时

参考资料

原文地址:https://www.cnblogs.com/20182326lyj/p/11794787.html

时间: 2024-11-07 00:22:51

20182326 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结的相关文章

《数据结构与面向对象程序设计》第四周学习总结

20182304 2019-2020-1 <数据结构与面向对象程序设计>第四周学习总结 教材学习内容总结 1.本章我们学习了使用并编写我们自己的类:类中有与类同名的构造方法,也可以有set,get,toSring与自己定义的方法.实例化一个对象,可通过该对象使用类里的所有方法.实例数据是每次创造一个实例后自动生成新的内存空间的变量 2.uml类图 :每个类可能包含三部分内容:类名.属性.操作(方法).UML类图有属于自己的语法,变量的类型名在变量名的后面,它们之间用冒号作为分隔符,方法的+和-

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

20182306 2019-2020-1 <数据结构与面向对象程序设计>第五学习总结 教材学习内容总结 尽量简单的总结一下本周学习内容 尽量不要抄书,浪费时间 看懂就过,看不懂,学习有心得的记一下 教材学习中的问题和解决过程 问题1:XXXXXX 问题1解决方案:XXXXXX 问题2:XXXXXX 问题2解决方案:XXXXXX ... 代码调试中的问题和解决过程 问题1:XXXXXX 问题1解决方案:XXXXXX 问题2:XXXXXX 问题2解决方案:XXXXXX ... 代码托管 (stat

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

教材学习内容总结 1.编写类与方法(构造方法的结构和用途) 2.实际参数与形式参数.public与private.return与void的区别与含义. 3.UML类图的含义与形式 4.静态类(Math类)静态变量.静态方法 5.类间关系(依赖关系.聚合关系.继承关系) 6.接口的使用,能够在某个类中实现接口的方法(Comparable.Iterator) 7.软件活动开发.方法设计.方法重载.测试(黑盒测试.白盒测试) 教材学习中的问题和解决过程 问题1:toString与return返回的值的

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

教材学习内容总结 1.继承的基本语法与用法. 2.利用UML类图表示继承关系. 3.在具体编写类的时候,先是数据声明再是方法声明. 4.toString方法用println或print或字符串连接会自动调用. 5.每创建一个对象.都会为类中声明的变量建立新的内存空间. 6.UML图一些基础使用方法. 7.对象应该是自管理的,既对象的实例数据应该仅由该对象来修改,这就构成了封装. 代码调试中的问题和解决过程 问题1:测试代码出现错误 问题1解决方案:junit的方法名必须是textxxx或xxxt

20182326 2019-2020-1 《数据结构与面向对象程序设计》实验三报告

20182326 2019-2020-1 <数据结构与面向对象程序设计>实验三报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 刘颖洁 学号:20182326 实验教师:王志强 实验日期:2019年9月23日 必修/选修: 必修 1.实验内容 下载安装并使用IDEA,完成下面实验(https://www.cnblogs.com/rocedu/p/6371315.html). 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态(自己去学!) 初步掌握UM

20182326 2019-2020-1 《数据结构与面向对象程序设计》实验六报告

20182326 2019-2020-1 <数据结构与面向对象程序设计>实验六报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 刘颖洁 学号:20182326 实验教师:王志强 实验日期:2019年10月21日 必修/选修: 必修 1.实验内容 1.链表练习,要求实现下列功能: 通过键盘输入一些整数,建立一个链表: 这些数是你学号中依次取出的两位数. 再加上今天的时间. 例如你的学号是 20172301 今天时间是 2018/10/1, 16:23:49秒 数字就是 2

20182327 2019-2020-1 《数据结构与面向对象程序设计》实验二报告

20182327 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名:赵天昊 学号:20182327 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 (1) 编写简单的计算器,完成加减乘除模运算. (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. (3) 编写测试代码,测试验证. 2. 实验过程及结果 不多说,上

20182319《数据结构与面向对象程序设计》实验二报告

20182319 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 彭淼迪 学号:20182319 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 (1) 编写简单的计算器,完成加减乘除模运算. (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. (3) 编写测试代码,用规定方法测试验证. 2. 实验过程及结果

# 20182331 2019-2020-1 《数据结构与面向对象程序设计》实验二报告

20182331 2019-2020-1 <数据结构与面向对象程序设计>实验二报告 课程:<程序设计与数据结构> 班级: 1823 姓名: 高宽让 学号:20182331 实验教师:王志强 实验日期:2019年9月16日 必修/选修: 必修 1.实验内容 (1) 编写简单的计算器,完成加减乘除模运算. (2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出. (3) 编写测试代码,测试验证.(https://www.cnb