• 学号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
    • 蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
      • 有。云班课发挥的作用还是不小的。特别是上课的随机选人回答问题,一下就能让跑神的我将思绪聚集在课堂上,同时还是治疗打瞌睡的利器。
    • 你觉得这门课老师应该继续做哪一件事情?
      • 在实验提交时间和安排上给大家充分的自由,让大家能将时间利用最大化
    • 你觉得这门课老师应该停止做哪一件事情?
      • 可以考虑停止全英文的考试。反正对我这种英语水平的渣渣来说实在太难了。不去百度的话完全看不懂题目。
  • 相关阅读:
    数据库事务的四大特性以及事务的隔离级别
    informer使用示例
    Linux内存、Swap、Cache、Buffer详细解析
    浏览器访问百度的整个过程
    安装zookeeper
    配置java环境
    promethues开发
    go mod常用操作说明
    redis使用基础
    channel的声明和使用
  • 原文地址:https://www.cnblogs.com/yukunyang/p/14213997.html
Copyright © 2020-2023  润新知