20192319 2020-2021-1《数据结构与面向对象程序设计》课程总结
课程内容总结
-
第一章(绪论)介绍了Java程序设计语言和基本的程序开发过程。介绍了面向对象的开发方法,包括相关的概念和术语。
-
第二章(数据和表达式) 探讨了Java程序中使用的基本数据类型及执行计算时表达式的使用。讨论了数据类型之间的转换,以及如何借助于Scanner类交互地从用户读入输入。
-
第三章(使用类和对象) 探讨了预定义地类及由它们创建的对象的使用。使用类和对象来操作字符串、产生随机数、执行复杂的计算及格式化输出。本章讨论了包、枚举类型和包装类。
-
第四章(条件和循环) 介绍了用于判定的布尔表达式的使用。讨论了与条件及循环相关的所有语句,包括for循环的增强版本。为了分析并读入文本文件中的重复输入,再次讨论了Scanner类。
-
第五章(编写类) 探讨了与编写类及方法相关的基本问题。内容包括实例数据、可见性、作用域、方法参数及返回值类型,也涉及了构造方法、方法设计、静态数据和方法重载等内容。
-
第六章(图形用户界面) 全面研究了JavaGUI处理,重点是组件、事件和侦听器。使用多个an例子讨论了不同类的组件和事件。另外,也介绍了布局管理器、汕器层次、边框、工具示和助记符等内容。
-
第七章(数组) 涉及数组的基本概念和数组的处理,内容包括边界检查、初值表、命令行参数、变长参数列表和多维数组等。
-
第八章(继承) 讨论了类的派生及相关概念,包括类层次、重写及可见性等。
-
第九章(多态) 探讨了绑定的概念,以及它与多态的关系。之后研究了如何使用继承或接口来完成多态引用。
-
第十章(异常) 介绍了异常处理及不捕获异常时的后果。探讨了try-catch语句,分析了异常的传播。本章还介绍了处理输入/输出时的异常使用。
-
第十一章(递归) 介绍了递归的概念、递归的实现及其正确的用法。
-
第十二章(算法分析) 讨论了包括递归算法在内的算法复杂度的分析技术,介绍了大O符号。
-
第十三章(查找与排序) 探讨了线性查找和二分查找算法,还介绍了5个排序算法,其中包括平方阶及O(n log n)的算法。同时还研究了这些算法的效率。
-
第十四章(栈) 介绍了集合的概念,确定了将接口与现实分开的重要意义。介绍了栈的动态及定长的两种实现方法。介绍了泛型,详述了泛型对集合类的支持。
-
第十五章(队列) 介绍了FIFO队列,讨论了不同的实现选择。本章首先介绍了队列的概念,然后作为工具来帮助我们解决问题,最后研究所使用的数据结构。讨论了基于数组和动态链表的两种实现方式。
-
第十六章(树) 介绍了树的术语和相关概念,讨论了不同的实现策略,详细介绍了递归的链式实现方法。
-
第十七章(二叉查找树) 介绍了查找树的概念,以及典型的二叉查找树的链式实现。
-
第十八章(堆和优先队列) 讨论了堆的概念,以及堆和树的关系。研究了堆的完全链式实现方式。同时还分析了堆和优先队列之间的关系。
-
第十九章(图) 讨论了有向图和无向图。此外,还介绍了带权图、广度优先遍历和深度优先遍历之间的差别。介绍了最小生成树,讨论了它的实现策略。
-
第二十章(哈希方法) 涉及创建哈希表以便于存储及获取对象的相关概念。本章还介绍了Java API中与哈希相关的几种应用。
做过的作业
作业一:安装虚拟机
作业二:使用VIM编辑器编写Java程序
(1)任务1:使用VIM编辑器编写Java程序。要求输入2个Int类型的数值m和n,当m不为0时,计算(m!)+(m的n次方),并输出。当m为0时提示重新输入。
要求程序能够运行成功,否则后面均不得分。
①:程序运行结果截图(全屏截图+学号水印)(4分)
②:git push成功的截图(全屏截图+学号水印)(4分)
③:单步调试,查看当m=2时的m和n的中间值(可以使用locals或print等查看)(全屏截图+学号水印)(4分)
本题12分,如果存在下面问题则扣分:
①不使用判断和循环语句扣1分。②不用VIM编辑器扣1分。③不用命令行的方式编译运行扣1分。④没有截全屏扣1分。
可以直接截图,也可以放到一个word文件,把word文件传到这里。
(2)任务2:使用VIM编辑器编写Java程序。要求输入1个Int类型的数值n。当m>0时,输出一个m行的三角形(丑或漂亮的三角形都行)。当m小于等于0时提示重新输入。
要求程序能够运行成功,否则后面均不得分。
本题8分,要求①把运行结果截图上传(全屏截图+学号水印),每个同学输入的值不同(例如01号输入1,02输入2,12号输入3,22号输入4,29号输入11)
要求②把上传码云成功的截图(全屏截图+学号水印)和码云链接写上。
扣分项:
不用VIM编辑器扣1分。不用命令行的方式编译运行扣1分。没有截全屏扣1分。其他根据实际情况扣分,例如截图不清楚可以扣分。
可以直接截图,也可以放到一个word文件,把word文件传到这里。
作业三:类继承作业
(1)编写一个类(书、人、动物、汽车、球员、游课程、戏角色等),定义类的属性和方法。
(2)编写测试类(暂用包含main方法的类),new一个上面类的对象并初始化,然后调用类的属性和方法。
(3)编译运行通过,代码传到码云。
把以上代码和运行截图放到一个word或者pdf文件中,传到这里。
本题总分6分,根据实际情况酌情判分。
作业四:复数计算器
实现复数类(加减乘除运算和比较大小)。要求使用Comparable接口、要求自定义接口、要求使用继承。
作业五:栈实践
用数组实现自己的栈,ArrayStackADT,需要包含栈的常规操作,并测试。需要包含push、pop、peek、size、isEmpty等操作。
作业六:查找及ASL作业(计算)
给定关键字序列19 14 23 1 68 20 84 27 55 11 10 79,试分别用顺序查找、折半查找、二叉排序树查找、散列查找(用线性探查法和链地址法)来实现查找。试画出它们的对应存储形式(顺序查找的顺序表,二分查找的判定树,二叉排序树查找的二叉排序树,两种散列查找的散列表),并求出每一种查找的成功平均查找长度。其中,散列函数H(k)=k%11。
作业七:排序
使用选择和插入排序法,写出第3次排序的结果:3 1 9 3 6 2 10
作业八:二分查找(折半查找)
给Searching类添加二分查找算法的递归实现方法。创建驱动程序来演示这个实现机制。
(1)编程实现递归
(2)创建一个测试类,测试递归实现的二分查找是否正确。
作业九:树-计算题
计算题:
(1)有1023个结点的完全二叉树,其高度是多少?叶结点数是多少?(2分)
(2)高度为h的完全二叉树至少有多少个结点?至多有多少个结点?(2分)
(3)已知一棵度为m的树中有n1个度为1的结点,n2个度为2的结点,…,nm个度为m的结点,问该树中有多少个叶结点?(2分)
作业十:二叉树的建立和层序遍历法实践
(1)给定一个序列AB#CD###E#F##建立一颗树,根据“二叉树的生成”算法构造这颗树。(3分)
(2)使用层序遍历方法完成遍历并测试(3分)。
作业十一:哈夫曼编码测试
哈夫曼编码测试,画出哈夫曼树,写出各个叶子节点的编码。
作业十二:最小生成树测试
(1)画出Prim算法的最小生成树的生成过程
(2)画出Kruscal算法的最小生成树的生成过程
(3)计算最小权值
作业十三:Dijkstra(迪杰斯特拉)算法测试
使用Dijkstra(迪杰斯特拉)算法计算单源(V1出发)最短路径。
要求
(1)写出V1到各个顶点的最短路径
(2)要求写出最短路径计算过程(类似于图2)
作业十四:地图染色问题
给图染色,具体算法如下:
(1)将图的结点按照度数递减的次序排列.
(2)用第一种颜色对第一个结点着色,并按照结点排列的次序
对与前面着色点不邻接的每一点着以相同颜色.
(3)用第二种颜色对尚未着色的点重复步骤2,直到所有点着色完为止.
实验报告链接汇总
实验一: 20192319李歆韵 第一周作业
1.对专业的认识和期望
2.上学期C语言总代码量情况与在这门课程即将遇到的挑战
3.上学期程序设计基础课程学习情况
Oracle VirtualBox 6.1.14版本虚拟机安装
Ubuntu 20.04版本系统安装
VIM、GIT、Cheat命令安装
学习Linux
实验二: 20192319 2020-2021-1 《数据结构与面向对象程序设计》实验一报告
基于命令行和IDEA进行简单的Java程序编辑、编译、运行和调试。
练习Linux基本命令;
学习Java程序的JDB调试技能:https://www.cnblogs.com/rocedu/p/6371262.html
编写简单的Java程序。
实验三: 20192319 2020-2021-1 《数据结构与面向对象程序设计》实验二报告
(1) 编写简单的计算器,完成加减乘除模运算。
(2) 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出。
(3) 编写测试代码,测试验证。(https://www.cnblogs.com/rocedu/p/4472842.html)
实验四: 20192319 2020-2021-1 《数据结构及面向对象程序设计》实验三报告
1.初步掌握单元测试和TDD
2.理解并掌握面向对象三要素:封装、继承、多态
3.初步掌握UML建模
4.完成蓝墨云上 (1)-(5)实验。
实验五: 20192319 2020-2021-1 《数据结构及面向对象程序设计》实验四报告
(一)Java Socket编程
1.学习蓝墨云上教材《Java和Android编程》“第16章 输入/输出 ”和“第22章 网络”,学习JavaSocket编程
2.结对编程。结对伙伴A编写客户端SocketClient.java,结对伙伴B编写服务器端。
3.截图加学号水印上传蓝墨云,代码push到码云,并撰写实验报告。
(二)Java和密码学
参考 http://www.cnblogs.com/rocedu/p/6683948.html
以结对的方式完成Java密码学相关内容的学习(帖子中所有代码和相关知识点需要学习)。提交学习成果码云链接和代表性成果截图,要有学号水印。
(三)编写有理数/复数计算器
结对编程,结对伙伴A编写有理数计算器。结对伙伴B编写复数计算器。截图加水印上传蓝墨云,代码push码云。
(四)远程有理数计算器
结对编程,结对伙伴A编程实现客户端,结果伙伴B实现服务器端。
客户端通过键盘输入一个有理数计算的公式(例如:1/4 + 1/6 = ),并把该公式以字符串的形式发送给伙伴B(服务器端),服务器端根据字符串计算出结果为5/12,并把结果返回给客户端A,A收到结果后输出结果。截图加水印上传蓝墨云,代码push码云。
(五)远程复数计算器
结对编程,结对伙伴B编程实现客户端,结果伙伴A实现服务器端。
客户端通过键盘输入一个有理数计算的公式(例如:1/4 + 1/6 = ),并把该公式以字符串的形式发送给伙伴A(服务器端),服务器端根据字符串计算出结果为5/12,并把结果返回给客户端B,B收到结果后输出结果。截图加水印上传蓝墨云,代码push码云。
实验六: 20192319 2020-2021-1 《数据结构及其面向对象程序设计》实验五报告
1.Android Stuidio的安装测试:
参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十四章:
参考http://www.cnblogs.com/rocedu/p/6371315.html#SECANDROID,安装 Android Stuidio
完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号,自己学号前后一名同学的学号,提交代码运行截图和码云Git链接,截图没有学号要扣分
学习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链接,截图要有学号水印,否则会扣分
实验七: 20192319 2020-2021-1 《数据结构及其面向对象程序设计》实验六报告
1.链表练习,要求实现下列功能:
通过键盘输入一些整数,建立一个链表;这些数是你学号中依次取出的两位数,再加上今天的时间。打印所有链表元素, 并输出元素的总数。
在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。做完这一步,把你的程序签入源代码控制(git push)。
2.链表练习,要求实现下列功能:
实现节点插入、删除、输出操作;继续你上一个程序,扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;从磁盘读取一个文件,这个文件有两个数字。从文件中读入数字1,插入到链表第 5位,并打印所有数字,和元素的总数。保留这个链表,继续下面的操作。从文件中读入数字2,插入到链表第0位,并打印所有数字,和元素的总数。保留这个链表,并继续下面的操作。从链表中删除刚才的数字1,并打印所有数字和元素的总数。
3.链表练习,要求实现下列功能:
使用冒泡排序法或者选择排序法根据数值大小对链表进行排序;如果你学号是单数, 选择冒泡排序,否则选择选择排序。在排序的每一个轮次中,打印元素的总数,和目前链表的所有元素。
在android上实现实验(1)和(2)
在android平台上实现实验(3)
实验八: 20192319 2020-2021-1 《数据结构及其面向对象程序设计》实验七报告
定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。
要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位
提交运行结果图。
重构你的代码
把Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301)
把测试代码放test包中
重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种)
参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试
提交运行结果截图
补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个)
测试实现的算法(正常,异常,边界)
提交运行结果截图(如果编写多个排序算法,即使其中三个排序程序有瑕疵,也可以酌情得满分)
编写Android程序对实现各种查找与排序算法进行测试
提交运行结果截图
推送代码到码云(选做,加分)
实验九: 20192319 2020-2021-1 《数据结构及其面向对象程序设计》实验八报告
参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)
用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台
基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序HDIBEMJNAFCKGL和先序ABDHIEJMNCFGKL,构造出附图中的树
用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台
自己设计并实现一颗决策树
提交测试代码运行截图,要全屏,包含自己的学号信息
课下把代码推送到代码托管平台
输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果(如果没有用树,正常评分。如果用到了树,即使有小的问题,也酌情给满分)
提交测试代码运行截图,要全屏,包含自己的学号信息
实验十: 20192319 2020-2021-1 《数据结构及其面向对象程序设计》实验九报告
完成图的综合实践
(1)初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数、边个数,建议先在草稿纸上画出图,然后再输入顶点和边数)(2分)
(2)图的遍历:完成有向图和无向图的遍历(深度和广度优先遍历)(4分)
(3)完成有向图的拓扑排序,并输出拓扑排序序列或者输出该图存在环(3分)
(4)完成无向图的最小生成树(Prim算法或Kruscal算法均可),并输出(3分)
(5)完成有向图的单源最短路径求解(迪杰斯特拉算法)(3分)
PS:本题12分,批阅时注意查重。目前没有明确指明图的顶点和连通边,如果雷同或抄袭,建议本次实验0分。
代码托管链接:besti1923 / 李歆韵20192319
1.给出statistic.sh的运行结果,说明本学期的代码量目标达到没有?
基本达到预期
2.加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
编程是一个具有相当创造性的工作,在对一段代码的修改,即加点代码,改点代码,这个过程中,体现的就是你对编程的理解和创造性,只有你对这一段代码理解的相当透彻,才有可能通过加点代码改点代码来优化它,而这种创造性,只有通过不断的练习来获得,代码打得多了,编程能力自然就提升了。
3.积极主动敲代码做到没?教材实践上有什么经验教训?
很可惜没有做到积极主动敲代码,大部分时间都是根据老师的要求敲代码,缺乏学习的积极性。
教材实践的经验教训最主要的还是再一次提醒了我基础的重要性吧,教材上的知识和方法可以解决大部分可能遇到的问题。
课程收获与不足
1.自己的收获(投入,效率,效果等)
一个学期许多零碎时间的投入,感觉还是缺乏积极性,只学到一些基本的知识。
2.自己需要改进的地方
对于基础知识的掌握不够牢靠,一个是由于实践什么的时间比较紧迫,没有太多的时间重新沉下心来再认真自学一遍课本上的知识,再一个也是对于基础知识的重视还是不够
代码量不太够,大部分代码都是固定格式,固定套路的重复工作,真正灌注了我所学所用知识的有灵魂的代码还是不够多,总的来说,自主练习太少
3.结对学习是不是真正贯彻了?写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
还是基本贯彻了,有些不懂的知识问了之后理解的更透彻了。
问卷调查
1.你平均每周投入到本课程有效学习时间有多少?
18小时左右
2.每周的学习效率有提高吗?你是怎么衡量的?
极不稳定的,遇到难的很难独立去实现,花了很多时间。
3.蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
有用的、很方便。希望老师可以多多开发这方面的实用功能。
4.你觉得这门课老师应该继续做哪一件事情?
不考试就是yyds!!!
5.你觉得这门课老师应该停止做哪一件事情?
挂人。(滑稽)
发挥时间
志强老师新年快乐啊!!!
总结中涉及到的链接的二维码
作业一:
作业二:
作业三:
作业四:
作业五:
作业六:
作业七:
作业八:
作业九:
作业十:
作业十一:
作业十二:
作业十三:
作业十四:
实验一
实验二
实验三
实验四
实验五
实验六
实验七
实验八
实验九