20192329 2020-2021-1 《数据结构与面向对象程序设计》课程总结

课程总结

第一章 绪论

Java是面向对象程序设计语言
类是对象的蓝图
三大特性:封装 继承 多态
重要术语:对象 属性 方法
注释、标识符:class、public、static、void、main、String、args、System
Java是高级语言

第二章 数据和表达式

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

基本数据类型
Java一共有8种基本数据类型:boolean、byte、short、int、long、float、double、char
这8种基本数据类型可以分为
逻辑类型:boolean
常量:true、false
整数类型:byte、short、int、long
表达式
表达式由运算符及操作数组成,用来执行一个计算。
数据转换
Java中数据的基本类型(不包括逻辑类型)按精度从低到高:
byte short char int long float double
当把精度低的赋值给精度高的(从左到右)变量时,系统自动完成转换:例如:float x = 100;
当把精度高的赋值给精度低的(从右到左)变量时,必须显示加强制类型转换,例如: int x=(int)3.14;
把一个int类型的常量赋值给一个byte或者一个short类型变量时,如果超出byte或者short的范围必须加强制类型转换,例如
byte a = (byte)128;
读输入数据
输入数据
可以使用Scanner类创建一个对象:
Scanner reader = new Scanner(System.in);
输出数据
System.out.println()和System.out.print()都可输出数据,区别是前者换行、后者不换行。

第三章 使用类和对象

创建对象
String类

Random类
Math类

第四章 条件和循环

if与if-else语句
字符比较:Unicode顺序
浮点数的比较:计算两个差值的绝对值,在与公差进行比较。
字符比较:Unicode顺序,大小写字母,数字要联系ASCII表中的编码。
对角比较:equals。
switch语句:switch(){case :break;default:}
迭代器:迭代器是一个对象,可以使用它的一些方法每次处理集合中的一个元素。也就是说,迭代器可以按需一项项地处理每一个元素
while语句 break跳出循环。
do-while 语句:do{}while();
for 语句:for( ; ; ),与while等价

第五章 编写类

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

第六章 图形用户界面

GUI 组件 布局

第七章 数组

数组索引从0开始。
数组是对象,要用new实例化,new指定大小,之后数组大小不能改变

第八章 继承

讨论类继承的设计机制,说明抽象类的目的及使用方法,讨论与继承有关的可见性问题
extends继承,代码复用,Java只支持单继承
super与this常用于调用构造方法
方法重载与重写:重载:根据参数类型与数量确定初始化方法 重写:重新编写父类方法
Object类是所有类的父类
abstract抽象类达抽象概念,不能用new实例化
抽象类的子类:实现父类的抽象方法变成具体类,不实现父类抽象方法仍要用abstract修饰

第九章 多态

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

第十章 异常

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

第十一章 递归

递归思想
递归程序设计
使用递归

第十二章 算法分析

计算机系统中最重要的资源之一是CPU时间,完成具体任务的算法效率是决定程序执行速度的一个主要因素

第十三章 树

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

第十四章 栈

栈:先进后出
栈常见方法
push():将元素添加到栈顶
pop():删除栈顶元素
peek():查看栈顶元素
isEmpty():判断栈是否为空
size():判断栈中元素的个数
使用栈计算后缀表达式:从左到右扫描表达式,操作数入栈,遇到操作符则pop两个数计算后再push。
链表:与有固定大小的数组不一样,链表没有容量上限。

第十五章 队列

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

第十六章 树

根节点:唯一
节点的度:节点拥有的子树数。度为0:称为终端节点或叶节点
树的度:树内各节点的度的最大值
内部节点:除根节点外的节点
孩子(child):节点的子树的根 称为该节点的孩子,反过来,称为双亲(parent)
兄弟(sibling):同一双亲的孩子之间的关系
节点的祖先:从根到该节点所经分支上的全部节点
节点层次:根为第一层,根的孩子为第二层
树的深度(Depth):树中节点的最大层次

第十七章 二叉查找树

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

第十八章 堆和优先队列

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

第十九章 图

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

二,总结做过的作业

任务1安装虚拟机

实践一,虚拟机编写简单程序

编写简单的类

作业4:类继承作业

作业5:复数计算器

作业6:栈实践

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

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

作业9:哈夫曼编码实践

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

作业17:地图染色问题

Dijkstra(迪杰斯特拉)算法测试

拓扑

三、实验报告链接汇总

实验一 :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的运行结果,说明本学期的代码量目标达到没有?
还需要一些代码
代码托管链接:https://gitee.com/li-yuanhe
加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
在已有代码的上并且可以很好的理解此代码的基础上,加点代码,改点代码比较容易。
先把眼前的问题解决解决好,再考虑将来的扩展问题。

积极主动敲代码做到没?教材实践上有什么经验教训?
做到一半,基本上都是为了完成任务而去写代码,前期把教材上的代码敲了一半,且多练习方能学好学精。
课程收获与不足

4.问卷调查

你平均每周投入到本课程有效学习时间有多少?
两到三天
每周的学习效率有提高吗?你是怎么衡量的?
有提高,在精力最充沛时刻打开idea
蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
有促进,抢答环节请加大力度
你觉得这门课老师应该继续做哪一件事情?
抢答环节,既可回顾知识点,又可提高积极性,充满了趣味性QWQ。
你觉得这门课老师应该停止做哪一件事情?
代码截图加水印,他太麻烦了wwww
其他任意发挥

王志强老师永远最帅!!!

posted on 2021-01-01 11:19  巴巴六的小斧头  阅读(57)  评论(0编辑  收藏  举报