目录
- 2019-2020-26 《数据结构与面向对象程序设计》第8周学习总结
- 教材学习内容总结
- 教材学习中的问题和解决过程
- 代码调试中的问题和解决过程
- 代码托管week13
- 上周考试错题总结
- 结对及互评
- 点评:
- 点评过的同学博客和代码
- 其他(感悟)
- 学习进度条
- 参考资料
2019-2020-26 《数据结构与面向对象程序设计》第8周学习总结
教材学习内容总结
- 链表
- 可用对象引用变量来创建链式结构
- 链表由对象组成,其中每个对象指向表中的下一个对象
- 链表根据需要动态变大,本质上没有容量限制
- 修改引用的词序对链表的维护很重要
- 处理链表中的第一个结点通常需要特殊处理
- 实现带哨兵结点或虚位结点作为第一个结点的表,可以去掉处理第一个结点这种特殊情形
- 保存在集合中的对象不能包含所用数据结构的任何实现细节
- 使用链表实现栈,有效实现了相关操作的集合的任何一种实现方案都能用来解决问题
- 栈的链式实现方案在链表的一端添加和删除元素
- 查找
- 查找是在一组项内找到指定目标或是确定目标不存在的过程
- 高效的查找使得比较的次数最少
- Comparable接口允许多态实现算法,而不是只应用于特定的类
- 排序
- 二分查找利用了查找池有序的这个特性
- 二分查找每次比较都排除了一半的可行候选数据
- 排序是按某种标准将一列数据按确定的次序重排的过程
- 选择排序算法反复的将一个个具体的值放到它最终的有序位置,从而完成一组值的排序
- 插入排序算法反复地将一个个具体的值插入到表的已有序的子表中,从而完成一组值的排序
- 冒泡排序算法反复的比较相邻元素,如果必要就交换它们的次序,从而完成一组值的排序
- 快速排序算法通过划分表,然后再递归地对两个子表进行排序,从而完成一组值的排序
- 归并排序算法递归地将表平分为两部分,直到每个子表中只含有一个元素,然后将这些子表归并为有序表,从而完成一组值的排序
- 二分查找有对数阶的复杂度,对于大的查找池来说,这非常有效率
- 选择排序,插入排序及冒泡排序的平均运行时间复杂度是O(n2)
- 快速排序的关键是选择一个好的划分元素
- 归并排序的最差运行时间复杂度是O(n log n)
教材学习中的问题和解决过程
- 问题1:链表和数组的区别
- 问题1解决方案:
- 区别一:物理地址存储的连续性
数组的元素在内存中是连续存放的。
链表的元素在内存中不一定是连续存放的,通常是不连续的。 - 区别二:访问速度
数组的访问速度很快,因为数组可以根据数组可以根据下标进行快速定位。
链表的访问速度较慢,因为链表访问元素需要移动指针。 - 区别三:添加、删减元素速度
数组的元素增删速度较慢,因为需要移动大量的元素。
链表的元素增删速度较快,因为只需要修改指针即可。
- 问题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分
点评过的同学博客和代码
- 本周结对学习情况
- 赵沛凝20182301
- 结对照片
- 结对学习内容
- Comparable接口的使用
- 上周博客互评情况
其他(感悟)
在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小时
参考资料
- 《Java程序设计与数据结构教程(第二版)》
- 《Java程序设计与数据结构教程(第二版)》学习指导
- 使用开源中国(码云)托管代码 - 娄老师 - 博客园
- 链表和数组的区别 - 天射手座的博客 - CSDN博客
- Comparable接口作用 - Wizard的博客 - CSDN博客
原文地址:https://www.cnblogs.com/20182326lyj/p/11794787.html
时间: 2024-11-07 00:22:51