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

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

第一章(绪论)介绍了Java程序设计语言和基本的程序开发过程。介绍了面向对象的开发方法,包括相关的概念和术语。

第二章(数据和表达式)探讨了Java程序中使用的基本数据类型及执行计算时表达式的使用。讨论了数据类型之间的转换,以及如何借助于Scanner类交互地从用户读入输入。

第三章(使用类和对象)探讨了预定义地类及由它们创建的对象的使用。使用类和对象来操作字符串、产生随机数、执行复杂的计算及格式化输出。本章讨论了包、枚举类型和包装类。

第四章(条件和循环)介绍了用于判定的布尔表达式的使用。讨论了与条件及循环相关的所有语句,包括for循环的增强版本。为了分析并读入文本文件中的重复输入,再次讨论了Scanner类。

第五章(编写类)探讨了与编写类及方法相关的基本问题。内容包括实例数据、可见性、作用域、方法参数及返回值类型,也涉及了构造方法、方法设计、静态数据和方法重载等内容。

第七章(数组)涉及数组的基本概念和数组的处理,内容包括边界检查、初值表、命令行参数、变长参数列表和多维数组等。

第八章(继承)讨论了类的派生及相关概念,包括类层次、重写及可见性等。

第九章(多态)探讨了绑定的概念,以及它与多态的关系。之后研究了如何使用继承或接口来完成多态引用。

第十章(异常)介绍了异常处理及不捕获异常时的后果。探讨了try-catch语句,分析了异常的传播。本章还介绍了处理输入/输出时的异常使用。

第十一章(递归)介绍了递归的概念、递归的实现及其正确的用法。

第十二章(算法分析)讨论了包括递归算法在内的算法复杂度的分析技术,介绍了大O符号。

第十三章(查找与排序)探讨了线性查找和二分查找算法,还介绍了5个排序算法,其中包括平方阶及O(n log n)的算法。同时还研究了这些算法的效率。

第十四章(栈)介绍了集合的概念,确定了将接口与现实分开的重要意义。介绍了栈的动态及定长的两种实现方法。介绍了泛型,详述了泛型对集合类的支持。

第十五章(队列)介绍了FIFO队列,讨论了不同的实现选择。本章首先介绍了队列的概念,然后作为工具来帮助我们解决问题,最后研究所使用的数据结构。讨论了基于数组和动态链表的两种实现方式。

第十六章(树)介绍了树的术语和相关概念,讨论了不同的实现策略,详细介绍了递归的链式实现方法。

第十七章(二叉查找树)介绍了查找树的概念,以及典型的二叉查找树的链式实现。

第十八章(堆和优先队列)讨论了堆的概念,以及堆和树的关系。研究了堆的完全链式实现方式。同时还分析了堆和优先队列之间的关系。

第十九章(图)讨论了有向图和无向图。此外,还介绍了带权图、广度优先遍历和深度优先遍历之间的差别。介绍了最小生成树,讨论了它的实现策略。

第二十章(哈希方法)涉及创建哈希表以便于存储及获取对象的相关概念。本章还介绍了Java API中与哈希相关的几种应用。

总结所做过的作业

实验报告链接汇总

  • [实验一 Linux基础与Java开发环境] (https://www.cnblogs.com/yk20192320/p/13660992.html)
    (1)基于命令行和IDE进行简单的Java程序编辑、编译、运行和调试。
    (2)练习Linux基本命令;
    (3)学习Java程序的JDB调试技能。
    (4)编写简单的Java程序。

  • [20192320 2020-2021-1 《数据结构与面向对象程序设计》实验二报告]

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

  • [20192320 2020-2021-1 《数据结构与面向对象程序设计》实验三报告]

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

  • [20192320 实验四 《数据结构与面向对象程序设计》实验报告]

  • (https://www.cnblogs.com/yk20192320/p/13907257.html)**
    (1)Java Socket编程
    1.学习蓝墨云上教材《Java和Android编程》“第16章 输入/输出 ”和“第22章 网络”,学习JavaSocket编程
    2.结对编程。结对伙伴A编写客户端SocketClient.java,结对伙伴B编写服务器端。
    3.截图加学号水印上传蓝墨云,代码push到码云,并撰写实验报告。
    (2)Java和密码学
    以结对的方式完成Java密码学相关内容的学习(帖子中所有代码和相关知识点需要学习)。提交学习成果码云链接和代表性成果截图,要有学号水印。
    (3)编写有理数/复数计算器
    结对编程,结对伙伴A编写有理数计算器。结对伙伴B编写复数计算器。截图加水印上传蓝墨云,代码push码云。
    (4)远程有理数计算器
    结对编程,结对伙伴A编程实现客户端,结果伙伴B实现服务器端。
    客户端通过键盘输入一个有理数计算的公式(例如:1/4 + 1/6 = ),并把该公式以字符串的形式发送给伙伴B(服务器端),服务器端根据字符串计算出结果为5/12,并把结果返回给客户端A,A收到结果后输出结果。截图加水印上传蓝墨云,代码push码云。
    (5)远程复数计算器
    结对编程,结对伙伴B编程实现客户端,结果伙伴A实现服务器端。
    客户端通过键盘输入一个有理数计算的公式(例如:1/4 + 1/6 = ),并把该公式以字符串的形式发送给伙伴A(服务器端),服务器端根据字符串计算出结果为5/12,并把结果返回给客户端B,B收到结果后输出结果。截图加水印上传蓝墨云,代码push码云。
    注意实验四(4)和实验四(5),一个人不能仅实现客户端,必须实现一个客户端和服务器,否则两个实验均不得分!!!
    (6)实验报告
    在规定时间前发表博客,标题“学号 实验四 《数据结构与面向对象程序设计》实验报告”

  • [20192320 实验五 《数据结构与面向对象程序设计》实验报告]

  • (https://www.cnblogs.com/yk20192320/p/13916535.html)**
    (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链接,截图要有学号水印,否则会扣分

  • [20192320 实验六 《数据结构与面向对象程序设计》实验报告]

  • (https://www.cnblogs.com/yk20192320/p/13960981.html)**
    (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)

  • [20192320 实验七 《数据结构与面向对象程序设计》实验报告]

  • (https://www.cnblogs.com/yk20192320/p/14055678.html)**
    (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程序对实现各种查找与排序算法进行测试
    提交运行结果截图
    推送代码到码云(选做,加分)

  • [20192320 实验八 《数据结构与面向对象程序设计》实验报告]

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

  • [20192320 2020-2021-1《数据结构与面向对象程序设计》实验九报告]

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

代码托管链接:[杨坤的码云]

(https://gitee.com/providence2320/yk-contest)

https://gitee.com/providence2320/yk-contest

  • statistic.sh运行结果

  • 加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
    使用有意义的函数和变量名字。如果你的函数和变量的名字,能够切实的描述它们的逻辑,那么你就不需要写注释来解释它在干什么。检讨一下我经常乱七八糟的起变量名,还觉得越简单越好,什么N、R、P都出现过,确实最后搞的自己一头雾水。写代码要习惯使用包,我在刚开始写代码的时候没有使用包的习惯,导致一个实验的代码经常找不到,或者在一长串的代码中不知道哪个是自己要用的。不会的问题先按照别人的思路过一遍,但一定要自己动手打,不能照着抄。多思考,多实践。

  • 积极主动敲代码做到没?教材实践上有什么经验教训?
    学期开始时很积极,每一项作业尤其是实验都会认真的做,看了《积极主动敲代码》那篇博客,也很认同他的观点,会分析教材上的代码。国庆节假期之前有所懈怠,没有做到积极主动,有点为了完成任务而完成任务。国庆节总结调整。学习数据结构的时候积极性有一个小高潮,对于栈等结构的分析比较有兴趣。学习树的时候又不积极了,当时也是事情很多,最记忆犹新的是有一天晚上踩着点赶deadline,赶的时候很着急,匆匆赶完之后是12点,惊险刺激而且心有余悸。跟自己说以后不管什么情况,绝对不可以这样赶deadline。教材实践基本上就是灵活运用,而且要锤炼细节。书上代码无脑敲进去是没有用的,而且会有各种各样的问题出现,需要自己修改。

课程收获与不足

  • 自己的收获(投入,效率,效果等)
    最大的收获是学会了自己啃书,出现问题自己上网去搜博客找解决方案。养成了一些好习惯,比如写学习总结博客、解决问题写博客、多看博客。学习了linux、Java、安卓和数据结构四大块知识。还有项目开发过程和项目管理的一些感性认识。

  • 自己需要改进的地方
    偶尔懒惰,数据结构没有留作业的部分有些没实现。要多多寻找方法,提高学习效率。这里的方法包括:如果学习代码时遇到看不懂的点该怎样最最高效的解决?对于易掌握的东西怎么高效消化而不浪费时间?加点代码,改点代码的前提其实是理解别人的代码,并且投入到实践中去,从头开始打代码的话会非常的艰难,复杂,拿别人的代码来进行理解,并在深入理解的基础上加以改造,应用,是最好的学习方式,在不断地改进中,我们吸取别人敲代码的经验,还有思路想法,当我们在自己敲代码的时候,我们也可以用这种思维去创造、去写新的我们的自己代码。对于所有的算法代码,其实不一定都要完完全全的掌握,世界上的算法是何其的多,计算机发展了那么多年,有那么多人前仆后继的去搞开发,自然代码和算法也是多种多样,所以当我们遇到不会的问题时,应当学会如何查询,如何在查询到的资源中进行改造,变成自己要用的东西

  • 结对学习是不是真正贯彻了?写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
    是。我自己比较懒。两个人在一起会互相督促。

问卷调查

  • 你平均每周投入到本课程有效学习时间有多少?
    20小时左右
  • 每周的学习效率有提高吗?你是怎么衡量的?
    (1)学习效率起起伏伏。
    (2)能否顺利完成任务。
  • 蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
    (1)有,可以按需查看所需要的资源。
    (2)希望资源能够更新一下,或者做下整理,资源太多了有时候也是一种烦恼...
  • 你觉得这门课老师应该继续做哪一件事情?
    督促学习,定时定量布置任务。
  • 你觉得这门课老师应该停止做哪一件事情?
    放缓一下进度吧,感觉上课需要讲的东西还没有讲清楚。

出你的总结中涉及到的链接的二维码

  • 作业1

  • 作业2

  • 作业3

  • 作业4

  • 作业5

  • 作业6

  • 作业7

  • 作业8

  • 作业9

  • 作业10

  • 作业11

  • 作业12

  • 作业13

  • 作业14

  • 实验一

  • 实验二

  • 实验三

  • 实验四

  • 实验五

  • 实验六

  • 实验七

  • 实验八

  • 实验九

posted @ 2020-12-31 17:34  providence2320  阅读(302)  评论(0编辑  收藏  举报