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

课程内容总结

第一章 简要内容

本章介绍了Java程序设计语言和基本的程序开发过程。介绍了面向对象的开发方法,包括相关的概念和术语。这一章还介绍了开发环境所使用的主要参考资料。

第二章 简要内容

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

  • 字符串
    • print及println方法
    • 字符串连接
    • 转义字符
  • 变量和赋值
    • 变量
    • 赋值语句
    • 常量
  • 基本数据类型
    • 整型和浮点型
    • 字符类型
    • boolean类型
  • 表达式
    • 算术运算符
    • 运算符优先级
    • 自增及自减运算符
    • 赋值运算符
  • 数据转换
    • 转换技术
  • 读输入数据
    • Scanner类

第三章 简要内容

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

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

一些关键概念的摘要

  • new运算符返回新创建对象的引用。
  • 多个引用变量可以指向同一个对象。
  • 方法常施加于一个具体的对象,对象的状态常常影响执行的结果。
  • 开发程序时类库非常有用。
  • Java标准类库按包来组织。
  • java. lang包中的所有类将自动引人到每个程序中。
  • 伪随机数生成器执行复杂的计算并得到伪随机数。
  • Math类的所有方法都是静态的,即通过类名来调用它们。

第四章 简要内容

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

  • if语句可以让程序选择是否执行一条特定的语句。
  • 循环语句可让程序多次执行同一条语句。
  • 可用逻辑运算符构造复杂的条件。
  • if-else语句可在条件为真时实现一个操作,在条件为假时实现另一个操作。
  • 在嵌套的if语句中, else子句与最近尚未匹配的if相匹配。
  • 可以使用compareTo方法来判定字符串之间的相对顺序。
  • break语句常用在switch语句的每个case分支的最后。
  • while语句重复地执行相同的语句,直到它的条件为假时为止。
  • 必须小心地设计程序,以避免无限循环。
  • do语句至少执行一次循环体。
  • 当循环有确定的执行次数时,通常使用1or语句。

第五章 简要内容

探讨了与编写类及方法相关的基本问题。、

一些关键概念摘要

  • 方法的返回值类型应该与方法头中规定的返回值类型一致。
  • 测试一个程序永远不能保证消除了全部错误。

第七章 简要内容

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

第八章 简要内容

讨论了类的派生及相关的概念,包括类层次、重写及可见性等。重点是强调在软件设计中继承的正确使用及它的作用是什么。

第九章 简要内容

探讨了绑定的概念,以及它与多态的关系。之后研究了如何使用继承或接口来完成多态引用。与多态相关的设计问题也在这一章介绍。

第十章 简要内容

介绍了异常处理及不捕获异常时的后果。探讨了try-catch语句,分析了异常的传播。本章还介绍了处理输人/输出时的异常使用,给出了一个编写文本文件的例子。

第十一章 简要内容

介绍了递归的概念、递归的实现及其正确的用法。

第十二章 简要内容

讨论了包括递归算法在内的算法复杂度的分析技术,介绍了大0符号。

第十三章 简要内容

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

第十四章 简要内容

介绍了集合的概念,确立了将接口与实现分开的重要意义。我们将栈作为集合的第一个例子,介绍了栈的动态及定长的两种实现方式。

第十五章 简要内容

介绍了队列的概念,然后作为工具来帮助我们解决问题,最后研究所使用的数据结构。讨论了基于数组和动态链表的两种实现方式。

第十六章 简要内容

介绍了树的术语和相关概念,讨论了不同的实现策略,详细介绍了递归的链式实现方法。本章还给出了一个二叉决策树的示例。

第十七章 简要内容

介绍了查找树的概念,以及典型的二叉查找树的链式实现。

第十八章 简要内容

讨论了堆的概念,以及堆与树的关系。研究了堆的完全链式实现方式。

第十九章 简要内容

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

总结所做过的作业

任务1安装虚拟机

课堂实践一

第1-4章 测试活动

编写简单的类

概念常识问答

复数计算器

Java测试(编写类、封装、继承、多态、异常)

栈实践

排序

二分查找(折半查找)实践

树-计算题

二叉树的建立和层序遍历法实践

哈夫曼编码测试(记得算下带权路径长度WPL)

最小生成树测试

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

地图染色问题

树和图

作业一 类继承作业

编写一个类,要求实现继承,可以以游戏、书籍、球员、复数等为例。


作业二 查找及ASL作业(计算)

给定关键字序列19 14 23 1 68 20 84 27 55 11 10 79,试分别用顺序查找、折半查找、二叉排序树查找、散列查找(用线性探查法和链地址法)来实现查找。试画出它们的对应存储形式(顺序查找的顺序表,二分查找的判定树,二叉排序树查找的二叉排序树,两种散列查找的散列表),并求出每一种查找的成功平均查找长度。其中,散列函数H(k)=k%11。

作业三 树-计算题

计算题:
1.有1023个结点的完全二叉树,其高度是多少?叶结点数是多少?(2分)
2.高度为h的完全二叉树至少有多少个结点?至多有多少个结点?(2分)
3.已知一棵度为m的树中有n1个度为1的结点,n2个度为2的结点,…,nm个度为m的结点,问该树中有多少个叶结点?(2分)

实验报告链接汇总

实验一

实验内容

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

实验报告链接

https://www.cnblogs.com/yukunyang/p/13798452.html

实验二

实验内容

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

实验报告链接

https://www.cnblogs.com/yukunyang/p/13798807.html

实验三

实验内容

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

实验报告链接

https://www.cnblogs.com/yukunyang/p/13812488.html

实验四

实验内容

(一)Java Socket编程
(二)Java和密码学
(三)编写有理数/复数计算器
(四)远程有理数计算器
(五)远程复数计算器

实验报告链接

https://www.cnblogs.com/yukunyang/p/13905999.html

实验五

实验内容

1.Android Stuidio的安装测试
2.Activity测试
3.UI测试
4.布局测试
5.事件处理测试

实验报告链接

https://www.cnblogs.com/yukunyang/p/13929126.html

实验六

实验内容

链表练习,要求实现多个不同的功能

实验报告链接

https://www.cnblogs.com/yukunyang/p/13961386.html

实验七

实验内容

1.定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。
2.重构你的代码
把Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301)
把测试代码放test包中
3.参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并##在Searching中补充查找算法并测试
4.补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个)
测试实现的算法(正常,异常,边界)

实验报告链接

https://www.cnblogs.com/yukunyang/p/14056929.html

实验八

实验内容

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

实验报告链接

https://www.cnblogs.com/yukunyang/p/14111230.html

实验九

实验内容

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

实验报告链接

https://www.cnblogs.com/yukunyang/p/14199642.html

代码托管链接

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


当时给自己的目标是6000,最后一共6300,勉勉强强达到目标

加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得

  • 命名变量名和类名时最好直接使用相应的英文单词
    • 大一下学习C语言时,大多是一些简单的计算,就习惯用不同的字母代表不同的变量,直接abcd排开了用。但是Java学习中我发现这种习惯很蠢。特别是多个类和接口,写着写着自己就啥也找不到分不清了。用英文单词就能很好地避免这个麻烦
  • 代码以实用为主
    • 不要想着给代码搞出新奇的功能。简洁,实用,并且可以完成要求的代码才是好代码。
  • 学会修改、扩展代码是很重要的
    • 改代码不是想象中的那样简单copy。必须要理解代码,才能知道哪些代码能改,怎么改的更好用。写文章要不停地润色修改,写代码也是这样。我觉得最好的代码都是改出来的。

积极主动敲代码做到没?教材实践上有什么经验教训?

  • 刚开始这门课的时候挺积极的。后来因为随着学习的深入,难度不断加大,开学时的新鲜感也不断淡去,慢慢变得懈怠,这也是我经常赶deadline的主要原因之一。后来学到了安卓,学到了数据结构,对敲代码又能提起一些兴趣。总体来说,勉强称得上积极。
  • 教材上的代码直接敲到idea上是毫无意义。敲之前一定要想明白这段代码是干嘛的。教材上的代码都值得好好钻研,因为每一段代码都是对应章节的范例,很有指导意义。

课程收获与不足

  • 自己的收获
    • 首先就是老师开学讲的自学能力。每一次的实验如果都只局限于课堂上讲的知识,那就根本做不出来。不得不去百度,去看教材,去CSDN,去看学长学姐的代码。
    • 与上学期学的C语言能够产生一些共鸣联系,对“代码”有了更多一点的理解。
  • 自己需要改进的地方
    • 面临的一个巨大问题就是学习效率低下。特别是自己去自学一些内容的时候,学的格外慢。要么跑神,要么在各种奇奇怪怪冒出来的事情上浪费时间。
    • 上课听讲的接受能力还有待提高。上课也会跑神,或者是心里浮躁,听不进去课。听课效率时高时低。
  • 结对学习是不是真正贯彻了?写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
    • 是真正贯彻了。实验五的时候要和结对伙伴一起完成远程计算器的客户端和服务端,是配合最多的一次合作。以后的实验也可以这样多设置这种形式,两个人对代码的沟通过程会是提高对代码理解的好机会

问卷调查

  • 你平均每周投入到本课程有效学习时间有多少?
    • 大约10个小时左右
  • 每周的学习效率有提高吗?你是怎么衡量的?
    • 学习效率忽高忽低。同样是实验,有时候从容不迫地提交,有时候火急火燎地赶ddl
  • 蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
    • 有。云班课发挥的作用还是不小的。特别是上课的随机选人回答问题,一下就能让跑神的我将思绪聚集在课堂上,同时还是治疗打瞌睡的利器。
  • 你觉得这门课老师应该继续做哪一件事情?
    • 在实验提交时间和安排上给大家充分的自由,让大家能将时间利用最大化
  • 你觉得这门课老师应该停止做哪一件事情?
    • 可以考虑停止全英文的考试。反正对我这种英语水平的渣渣来说实在太难了。不去百度的话完全看不懂题目。
原文地址:https://www.cnblogs.com/yukunyang/p/14213997.html