20192313 2019-2020-2《数据结构与面向对象程序设计》课程总结

1.课程内容总结

第一章 绪论

  • Java程序设计语言
  • 程序编译运行的步骤
  • 问题求解的一般方法
  • 软件开发的一般过程
  • 面向对象技术相关概念

第二章 数据和表达式

  • 讨论字符串的使用、字符串的连接及转义字符
  • 讨论变量的说明和使用
  • 介绍Scanner类

第三章 使用类和对象

  • 创建对象
  • String类
  • Random类
  • Math类

第四章 条件和循环

  • 使用if和switch语句执行基本的判定
  • 分别使用while、do、和for循环重复执行语句
  • 探讨用于判定的布尔表达式

第五章 编写类

  • 讨论类定义的结构和内容
  • 探讨方法定义的结构,包括参数和返回值
  • 讨论类之间的关系

第七章 数组

  • 数组元素
  • 数组的声明及使用
  • 对象数组
  • 命令行参数
  • 变长参数表
  • 二维数组

第八章 继承

  • 讨论创建子类
  • 讨论方法的重写
  • 讨论类层次
  • 讨论可见性
  • 讨论设计继承

第九章 多态

  • 定义多态
  • 讨论动态绑定的概念
  • 使用继承来创建多态引用
  • 探讨Java接口的用途和语法
  • 使用接口创建多态引用
  • 在多态背景下讨论面向对象设计

第十章 异常

  • 探讨异常
  • 检查异常消息并调用堆栈跟踪
  • 检查处理异常的try-catch语句
  • 探讨异常传播的概念
  • 描述Java标准类库中异常类的层次结构
  • 探讨I/O异常和文本文件的编写

第十三章 链式结构

  • 介绍使用引用创建链式结构
  • 链式结构与基于数组结构的比较
  • 探讨管理链表的技术
  • 讨论是否需要单独节点对象形成链式结构使用链表实现栈集合

第十四章 队列

  • 栈:先进后出
  • 栈常见方法
  • 使用栈计算后缀表达式:从左到右扫描表达式,操作数入栈,遇到操作符则pop两个数计算后再push。
  • 链表:与有固定大小的数组不一样,链表没有容量上限。
  • 链表被看成是一个动态结构,它的大小总随着所保存的元素个数在变大或变小。

第十五章 队列

  • 讨论队列的处理
  • 探讨队列的不同实现方式

第十六章 树

  • 树:节点+边
  • 完全二叉树(满二叉树也是完全二叉树)
  • 树的遍历: 先序遍历、 中序遍历、 后序遍历、 层序遍历
  • 二叉树的实现
  • 决策树:用二叉树来表示。

第十七章 二叉查找树

  • 二叉查找树: 查找、插入、 删除
  • 二叉查找树的实现
  • 平衡二叉查找树

第十八章 堆

  • 堆:完全二叉树(根节点小于左右孩子)
  • 堆的实现
  • 堆排序
  • 优先队列:具有更高优先级的项排在前面,具有相同优先级的项按先进先出的规则排列。

第十九章 图

  • 无向图:图中表示边的顶点对是无序的图是无向图,意味着两点间的连接是双向的。
  • 有向图:图中的边是顶点的有序对的图为有向图,意味着有向图的边是有方向的边。
  • 带权图:图中每条边都对应一个权值的图成为带权图,有时也称为网络。
  • 图遍历:广度优先遍历、 深度优先遍历
  • 无向图的最小生成树(Prim算法或Kruscal算法)
  • 有向图的拓扑排序
  • 有向图的最短路径求解(迪杰斯特拉算法)
  • 图的实现策略:邻接表邻接矩阵

2.作业总结

作业1:安装虚拟机

作业3:实践一,虚拟机编写简单程序

作业3:编写简单的类

作业4:类继承作业

作业5:复数计算器

作业6:栈实践

作业7:二分查找(折半查找)实践

作业8:二叉树的建立和层序遍历法实践

作业9:哈夫曼编码实践

作业10:查找及ASL作业(计算)

作业11:排序

作业12:树计算题

作业13:哈夫曼编码测试

作业14:最小生成树测试

作业15:拓扑排序实践测试

作业16:迪杰斯特拉算法测试

作业17:地图染色问题

三、实验报告链接汇总

实验一 :Linux基本操作与简单JAVA程序编写
(1)基于命令行和IDE(Intellj IDEA 简易教程](http://www.cnblogs.com/rocedu/p/4421202.html)进行简单的Java程序编辑、编译、运行和调试。
(2)练习Linux基本命令;
(3)学习Java程序的JDB调试技能:https://www.cnblogs.com/rocedu/p/6371262.html
(4)编写简单的Java程序。

实验二:编写简单的计算器,完成加减乘除模运算
(1) 编写简单的计算器,完成加减乘除模运算。
(2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出。
(3) 编写测试代码,测试验证。(https://www.cnblogs.com/rocedu/p/4472842.html)

实验三 :IDEA的使用
下载安装并使用IDEA,完成下面实验(https://www.cnblogs.com/rocedu/p/6371315.html)。
(1)初步掌握单元测试和TDD。
(2)理解并掌握面向对象三要素:封装、继承、多态。
(3)初步掌握UML建模。
(4)完成蓝墨云上 (1)-(5)实验。

实验四
(1)Java Socket编程
学习蓝墨云上教材《Java和Android编程》“第16章 输入/输出 ”和“第22章 网络”,学习JavaSocket编程并与结对伙伴实现客户端与服务器。
(2)Java和密码学
以结对的方式完成Java密码学相关内容的学习。提交学习成果码云链接和代表性成果截图,要有学号水印。
(3)编写有理数/复数计算器
(4)远程有理数计算器
(5)远程复数计算器

实验五:Android Stduio的相关测试
(1)学习Android Stuidio调试应用程序
(2)Activity测试
参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十五章:
构建项目,运行教材相关代码
创建 ThirdActivity, 在ThirdActivity中显示自己的学号,修改代码让MainActivity启动ThirdActivity
(3)UI测试
参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十六章:
构建项目,运行教材相关代码
修改代码让Toast消息中显示自己的学号信息
(4)布局测试:
参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十七章:
构建项目,运行教材相关代码
修改布局让P290页的界面与教材不同
(5)事件处理测试:
参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十八章:
构建项目,运行教材相关代码
提交代码运行截图和码云Git链接,截图要有学号水印,否则会扣分

实验六:链表练习
1.链表练习,要求实现下列功能:
通过键盘输入一些整数,建立一个链表;
这些数是你学号中依次取出的两位数。 再加上今天的时间。
例如你的学号是 20172301 ;今天时间是 2018/10/1, 16:23:49秒
数字就是20, 17,23,1, 20, 18,10,1,16,23,49
打印所有链表元素, 并输出元素的总数。
在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。 例如你叫 张三, 那么这个变量名就是int nZhangSan = 0; //初始化为 0.
做完这一步,把你的程序签入源代码控制(git push)。

2.链表练习,要求实现下列功能:
实现节点插入、删除、输出操作;
继续你上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;
从磁盘读取一个文件, 这个文件有两个数字。
从文件中读入数字1, 插入到链表第 5 位,并打印所有数字,和元素的总数。 保留这个链表,继续下面的操作。
从文件中读入数字2, 插入到链表第 0 位,并打印所有数字,和元素的总数。 保留这个链表,并继续下面的操作。
从链表中删除刚才的数字1. 并打印所有数字和元素的总数。

3.链表练习,要求实现下列功能:
使用冒泡排序法或者选择排序法根据数值大小对链表进行排序;
如果你学号是单数, 选择冒泡排序, 否则选择选择排序。
在排序的每一个轮次中, 打印元素的总数,和目前链表的所有元素。
在(2)得到的程序中继续扩展, 用同一个程序文件,写不同的函数来实现这个功能。 仍然用 nZhangSan (你的名字)来表示元素的总数。
4.在android上实现实验(1)和(2)
5.在android平台上实现实验(3)

实验七
1、定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。
要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位
提交运行结果图。
2、重构你的代码
把Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301)
把测试代码放test包中
重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种)
3、参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试
提交运行结果截图
4、补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个)
测试实现的算法(正常,异常,边界)
提交运行结果截图(如果编写多个排序算法,即使其中三个排序程序有瑕疵,也可以酌情得满分)
5、编写Android程序对实现各种查找与排序算法进行测试
提交运行结果截图
推送代码到码云(选做,加分)

实验八
(一)参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)
1、用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
2、课下把代码推送到代码托管平台
(二)基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序HDIBEMJNAFCKGL和后序ABDHIEJMNCFGKL,构造出附图中的树
1、用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
2、课下把代码推送到代码托管平台
(三)自己设计并实现一颗决策树
1、提交测试代码运行截图,要全屏,包含自己的学号信息
2、课下把代码推送到代码托管平台
(四)输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果(如果没有用树,正常评分。如果用到了树,即使有小的问题,也酌情给满分)
1、提交测试代码运行截图,要全屏,包含自己的学号信息

实验九:图的综合实践
(1) 初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数、边个数,建议先在草稿纸上画出图,然后再输入顶点和边数)
(2) 图的遍历:完成有向图和无向图的遍历(深度和广度优先遍历)
(3) 完成有向图的拓扑排序,并输出拓扑排序序列或者输出该图存在环
(4) 完成无向图的最小生成树(Prim算法或Kruscal算法均可),并输出
(5) 完成有向图的单源最短路径求解(迪杰斯特拉算法)

代码托管链接:

给出statistic.sh的运行结果,说明本学期的代码量目标达到没有?

代码量达到了。

加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
在代码编写过程中,可能会为了某一报错头疼不已,但这时,最好的方法就是耐住性子按步调试,错误可能出现在循环条件等小地方上,一定要勤于调试,调试出真理,心急写不出好代码。代码编写过程中,要保持思路的连贯性,即使中途有事要终端代码的编写,也要加上伪代码写明思路。编写伪代码是我的另外一个重要收获。

积极主动敲代码做到没?教材实践上有什么经验教训?
敲代码勤奋的不得了。在教材代码理解上有一定困难,课本代码使用的方法可能过于高端,所以代码还是按照自己的思路编写最好,课本上的代码只可以作为参考而不能迷信。
课程收获与不足
这学期学习Java无疑是收获最大的一门课,学习了Linux,IDEA,Android,数据结构。从知识量的角度来说,无疑是充实的一门课,但我认为最主要的收获还是体现在自学能力上。
自己的收获(投入,效率,效果等)
投入了很多时间学习java,效率也有所提高,学习java,不仅学到有用的知识,还锻炼了学习能力。
自己需要改进的地方
自己对与每日或者每周的学习规律没有把握,希望以后可以改进。
结对学习是不是真正贯彻了?写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
真正贯彻了,代码运行失败时同学指出错误;帮别人梳理代码思路等等。老师最好了,没啥建议,要是有,就是继续保持现在的样子。

4.问卷调查

1.你平均每周投入到本课程有效学习时间有多少?
差不多18h
2.每周的学习效率有提高吗?你是怎么衡量的?
呈等差数列地提高。
3.蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
有帮助,希望继续使用这种上课方式。
4.你觉得这门课老师应该继续做哪一件事情?
继续传播正能量!
5.你觉得这门课老师应该停止做哪一件事情?
停止吸粉!(但好像根本停不下来)

posted @ 2021-01-01 00:02  20192313陈宇帆  阅读(106)  评论(0编辑  收藏  举报