• 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

    • 实验一

    • 实验二

    • 实验三

    • 实验四

    • 实验五

    • 实验六

    • 实验七

    • 实验八

    • 实验九

  • 相关阅读:
    【python】@property装饰器
    使用pycharm专业版创建虚拟环境
    scrapy爬虫框架入门实战
    LoadRunner10个用户并发测试时分别取不同的参数运行脚本
    selenium grid原理
    使用 PHP 过滤器(Filter)进行严格表单验证
    ios之gcd
    ios之runloop笔记
    ios之block笔记
    iOS APP网络分析之rvictl(可以捕捉除了Wifi以外的网络类型)
  • 原文地址:https://www.cnblogs.com/yk20192320/p/14218108.html
Copyright © 2020-2023  润新知