20202323 2020-2021-2《数据结构与面向对象程序设计》课程总结
-
课程内容总结
课程总结
第一章:引言——java程序设计入门
本章介绍了Java程序设计语言和基本的程序开发过程。介绍了面向对象的开发方法,包括相关的概念和术语。
了解Java程序设计语言,了解程序编译运行的步骤,理解问题求解的一般方法,了解软件开发的一般过程,了解面向对象技术相关概念,面向对象的程序设计,
类是对象的蓝图,虚拟机介绍与安装,IDEA介绍与安装。
第二章:数据和表达式
介绍了Java中使用的基本数据类型及执行计算时表达式的使用。讨论了数据类型之间的转换,以及如何借助于Scanner类交互地从用户读入输入。
1.print及prinlnt方法
2.字符串连接:"+"
3.转义字符:\b:回退键 \t:制表符 \n;换行 \r:回车 \ ":双引号 \ ':单引号 \ \:反斜杠
4.变量声明:通知程序预留位置并标志存储位置名称
5.变量名=(赋值)变量值
6.常量:final,其值不能改变
7.基本数据类型: 8种(byte,short,int,long,float,double,boolean,char)
8.boolean只有true和false
9.算术运算:+、-、*、/、%, 关系运算:、>、>=、<、<=、==、!=, 逻辑运算:&&、||、!
10.运算符优先级:相同优先级满足从左到右的结合律。
- 第三章:使用类和对象
1.new:返回指向新建对象的引用
2.多个引用变量可以指向同一个对象
3.String类方法:compareTo (String str);equals();length()等。
4.Java标准类库中的类按包来组织。每个类都属于一个具体的包。
5.Random类:伪随机数生成器执行复杂的计算产生随机数
6.Math类:方法都是静态的,可以直接调用。
7.NumberFormat类:有两个方法getCurencyInstance和getPercentInstance返回用于格式化数值的对象。getCurencyInstance返回货币格式对象,getPercentInstance返回百分比格式对象。
8.DecimalFormat类:按惯例使用new运算符来实例化对象。
9.print,println,printf方法(printf属于C,便于移植)。
第四章:条件和循环
1.if与if-else语句
2.浮点数的比较:计算两个差值的绝对值,在与公差进行比较。
3.字符比较:Unicode顺序,大小写字母,数字要联系ASCII表中的编码。
4.对角比较:equals。
5.switch语句:switch(){case :break;default:}
6.while语句 break跳出循环。
7.do-while 语句:do{}while();
8.for 语句:for( ; ; ),与while等价
第五章:编写类
1.类:属性(变量/常量)+方法(函数)。
2.类是对象的抽象\蓝图,而对象是类的具体实例。
3.UML类图:实现、关联、聚合、组合、继承。
4.封装public、private
5.静态类
静态变量(static):有时也称类变量,它由类的所有实例共享,在一个对象中修改静态变量的值,就等于修改了其他所有对象中该静态变量的值。
静态方法:不需要为了调用方法而实例化类的一个对象,只能访问静态变量或局部变量。
6.类关系:依赖,聚合
7.方法重载与重写:重载:根据参数类型与数量确定初始化方法 重写:重新编写父类方法
8.测试
第七章 数组
本章主要讲了定义并使用数组来组织数据,讨论边界检查及容量管理技术,讨论数组作为对象及对象数组的问题。
数组
- 数组实例化;
- 数组越界问题排查与预防;
第八章 继承
1.extends继承,代码复用,Java只支持单继承
2.super与this常用于调用构造方法
3.方法重载与重写:重载:根据参数类型与数量确定初始化方法 重写:重新编写父类方法
4.Object类是所有类的父类
5.abstract抽象类达抽象概念,不能用new实例化
6.抽象类的子类:实现父类的抽象方法变成具体类,不实现父类抽象方法仍要用abstract修饰
第九章 多态
1.多态引用在不同的时候可以指向不同类型的对象
2.多态引用运行时才将方法调用与它的定义绑定在一起
3.引用变量可以指向声明继承于它的任意类的任何对象
4.接口是一组抽象方法,与抽象类一样不能被实例化
5.接口层次:接口可以继承接口;类可以实现接口,但不能继承接口。
6.Comparable接口:compareTo()
7.和class一样,接口可以用来声明对象引用变量
8.接口引用可以指向实现这个接口的任意类的作何对象
9.方法的参数可以是多态的
第十章 异常
1.错误和异常代表不常见的或不正确处理的对象
2.错误(Error)不用捕获
3.处理异常:在异常发生的地方处理;在程序的其他地方处理
4.程序中出现异常不捕获异常,程序会崩溃
5.try-catch 语句: Java中把正常流程放try块中,错误(异常)处理放catch块中,每个catch 子句处理try块中可能抛出的一种特定类型的异常,注意多个catch一定把父类放后面处理, finally:总会执行,用于资源管理
6.如果没有在异常发生处捕获及处理,异常会被传播给调用的方法
7.throw:方法中抛出Checked Exception,方法声明中必须有throws。
8.Java异常处理是要处理Exception类及其子类:
9.产生RuntimeException的问题在调用代码
10.I/O异常: 几乎所有的IO API都可能抛出异常
第十一章 递归
介绍了递归的概念、递归的实现及其正确的用法。
第十二章 算法分析
讨论了包括递归算法在内的算法复杂度的分析技术,介绍了大0符号。
第十三章 查找与排序
1.查找
- 线性查找:设置哨兵在数组开头或结尾,以便提高查找效率。
- 二分查找:从中间开始,要求表是有序的,每次比较后可以减少查找池中的一半元素
- 分块查找:先二分查找,再线性查找
- 哈希查找:直接通过关键字找到存储地址。
- 散列查找
2.排序
-
- 选择排序:分别将每个值放在排好序的最终位置,从而完成一组值的排序。
- 插入排序:将一个具体的值插入到表中已有序的子系列中,从而完成一组值的排序。
- 冒泡排序:重复地比较表中的相邻元素,如果它们不符合要求则交换他们。
- 快速排序:根据一个任意选定的划分元素来对表进行划分,然后再递归地对划分元素两边的字段进行排序,从而完成对表的排序。
- 归并排序:递归地对分表,知道每个子表只含有一个元素时为止,然后再将子表按序合并,从而完成对表的排序。
第十四章栈
- 栈是一种线性集合,其元素的添加和删除都是在同一侧进行了,特性是先进后出,后进先出(LIFO)的原则,即,只允许在表尾插入和删除的线性表。我们通常将允许插入和删除的一段叫做栈顶(top),而将另一端称为栈底(bottom)。类似于一个没有盖,但有底的圆筒,你的加入和删除只能从上端先进行。
- 表达式有三种标识法,分别是前、中、后缀表示法。其中,前缀表示法的操作是,连续出现的两个操作数和在它们之前且紧靠着的运算符构成一个最小表达式。后缀表示法是指运算符的顺序就是表达式的运算顺序。中缀表达法是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间。
- 栈的优势是,存取速度快,且栈之间的数据可以共享;缺点是缺乏灵活性,存取有严格的要求。
- 栈的初始化命令为:stack,基本操作和命令有empty( )——判断是否为空;peek( )——取栈顶值;push(object)——入栈;pop( )——出栈。
第十五章 队列
1 队列ADT
-
队列是一个线性集合,它在一端添加元素,在另一端删除元素————先进先出。
-
接口中一般有以下功能:
- enqueue:将元素插入到队尾。
- dequeue:从队头删除元素。
- first:检测队头的元素。
- isEmpty:判定队列是否为空。
- size:断定队列中的元素个数。
2 使用队列:编码K值
Caesar密码
3 使用队列:模拟票务柜台
提出假设、模拟实现
4 实现队列:使用链表
使用LinearNode对象的链表实现队列,必须在链表的两段进行操作,还要用一个整型变量count记录队列中的元素个数。
5 实现队列:使用数组
使用一个循环数组来实现队列,定义类Circular-ArrayQueue。将数组当做一个环来使用,第一个下标接在最后一个下标的后面。
第十六章 树
1.树
节点+边
-
子节点
-
兄弟结点
-
满二叉树
-
完全二叉树
2. 树的遍历
-
先序遍历
-
中序遍历
-
后序遍历
-
层序遍历
3. 树的实现策略
数组
4. 二叉树的实现
5. 决策树
简单的决策树可用一棵二叉树来表示。诊断时,从根节点的问题开始,根据答案选择适当的路径直至到达叶结点。
第十七章 二叉排序树
1. 二叉查找树
- 查找类:
- getRoot()返回根节点
- getParent()返回父结点
- getChildCount返回孩子结点数
- getFirstChild()返回第一个孩子结点
- getNextChild()返回下一个兄弟结点
- isEmpty()判定树是否为空树
- depth()求树的深度
- traverse()遍历树
- 插入类:
- tree()构造函数,初始化置空数
- assign()给当前结点赋值
- insert()插入操作,可以是结点或子树
- 删除类:
- makeEmpty()将树清空
- Delete()删除操作,可以是节点或子树
2. 二叉查找树的实现
3. 平衡二叉查找树
第十八章 堆和优先队列
1. 堆
完全二叉树
-
addElement(),向堆中添加一个新元素。
-
removeMin(),删除最小值,并重构堆。
-
removeMax(),删除最大值,并重构堆。
-
findMin(),寻找最小值。
2. 堆的实现
3. 堆排序
-
可以使用数组形式,用顺序结构存储最为合适。
-
最小堆(小顶堆)
-
最大堆(大顶堆)
4.优先队列
具有相同优先级的项按先进先出的规则排
第十九章 图
- 无向图:任意两个顶点之间的边都是无向边。
- 有向图:图中所有边都是有向边。
- 邻接点:边的两个顶点。
- 边的权:图的边带有与边相关的数据。
- 入度、出度、路径、回路、子图、连通图、非连通图、生成树
- 图的表示法:邻接矩阵(无向图邻接矩阵、有向图邻接矩阵、网的邻接矩阵)、边集数组、邻接表、十字链表、邻接多重表
- 图的遍历:
- 广度优先遍历:从一个顶点开始,优先遍历周围区域。
- 深度优先遍历:从一个顶点开始,优先遍历源节点拓展出的可达结点。
- 最短路径问题:Kruska算法、Dijkstra算法
- 拓扑排序
第二十章 哈希算法
涉及创建哈希表以便于存储及获取对象的相关概念。
作业总结
编写一组程序,要体现一下知识点: (1)继承 (2)多态 (3)重写 (4)重载 (5)目录创建 (6)文件创建 (7)字节流读写 (8)字符流读写
- 作业2:实现自己的ArrayList
1.编写自己的ArrayList类 要求:实现增加、删除、修改、查找、判断是否为空、返回list长度等操作。 2.测试。
- 作业3:ArrayStack测试
(1)撰写自己的类; (2)提供StackADT,ArrayStack(框架),实现ArrayStack里面的剩余方法; (3)编写测试类,测试所写的方法是否正确。
- 作业4:栈应用—进制转换
算法基于原理: N = (N div d)×d + N mod d 例如:(1348)10 = (2504)8 ,其运算过程如下: N N div 8 N mod 8 1348 168 4 168 21 0 21 2 5 2 0 2
要求输入一个十进制数,转换成任意进制数并输出。
- 作业5:最小生成树测试
1.画出Prim算法的最小生成树的生成过程 2.画出Kruscal算法的最小生成树的生成过程 3.计算最小权值
- 作业6:快速排序测试
3,44,38,5,47,15,36,26,27,2,46,4,19,50,48
快速排序
给出第一趟快速排序的结果!
- 作业7:最后一次测试
实验报告链接汇总
实验一:linux基础与java开发环境
1、基于命令行进行简单的Java程序编辑、编译、运行和调试。
2、练习Linux基本命令;
4、编写简单的Java程序。
20202323 实验一《Linux基础与Java开发环境》实验报告 - 20202323蒙思洋 - 博客园 (cnblogs.com)
实验二:Java基础(数据/表达式、判定/循环语句)
1、 编写简单的计算器,完成加减乘除模运算。
2、要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出。
3、编写测试代码,测试验证。
20202323 实验二Java基础(数据、表达式、判定、循环语句) - 20202323蒙思洋 - 博客园 (cnblogs.com)
实验三:数据结构与面对对象程序设计
1、 初步掌握单元测试和TDD
2、 理解并掌握面向对象三要素:封装、继承、多态
3、初步掌握UML建模
4.、完成蓝墨云上 (1)-(5)实验。
20202323 实验三 《数据结构与面向对象程序设计》实验报告 - 20202323蒙思洋 - 博客园 (cnblogs.com)
实验四:JavaSocket 编程
1、Java Socket编程
2、Java和密码学:参考 http://www.cnblogs.com/rocedu/p/6683948.html
3、编写有理数/复数计算器
4、远程有理数计算器
5、远程复数计算器
6、实验报告
20202323 实验四 《数据结构与面向对象程序设计》实验报告 - 20202323蒙思洋 - 博客园 (cnblogs.com)
实验五&六:线性结构与链表
1、链表练习,要求实现下列功能:通过键盘输入一些整数,建立一个链表;这些数是你学号中依次取出的两位数。 再加上今天的时间。打印所有链表元素, 并输出元素的总数。
2、链表练习,要求实现下列功能:实现节点插入、删除、输出操作;继续你上一个程序, 扩展它的功能;从磁盘读取一个文件,完成相关操作。
3、链表练习,要求实现下列功能:用冒泡排序法或者选择排序法根据数值大小对链表进行排序;
4、在android上实现实验(1)和(2)
5、在android平台上实现实验(3)
20202323《数据结构与面向对象程序设计》实验五和六报告 - 20202323蒙思洋 - 博客园 (cnblogs.com)
1、定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。
2、重构你的代码
3、把Sorting.java Searching.java放入 cn.edu.besti.cs2023.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301)重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种)
4、参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试
5、实现排序方法等(至少3个)测试实现的算法(正常,异常,边界)
6、编写Android程序对实现各种查找与排序算法进行测试
20202323 蒙思洋 2021-2022-1 《数据结构与面向对象程序设计》实验七报告 - 20202323蒙思洋 - 博客园 (cnblogs.com)
1、参考教材PP16.1,完成链树LinkedBinaryTree的实现,自己编写驱动类对自己实现的LinkedBinaryTree进行测试。
2、基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能
3、对自己实现的功能进行测试。
4、自己设计并实现一颗决策树提交测试代码运行截图,要全屏,包含自己的学号信息课下把代码推送到代码托管平台
5、输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果
20202323 《数据结构与面向对象程序设计》实验八报告 - 20202323蒙思洋 - 博客园 (cnblogs.com)
1、初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数、边个数,建议先在草稿纸上画出图,然后再输入顶点和边数)
2、图的遍历:完成有向图和无向图的遍历(深度和广度优先遍历)
3、 完成有向图的拓扑排序,并输出拓扑排序序列或者输出该图存在环
4、完成无向图的最小生成树(Prim算法或Kruscal算法均可),并输出
5、完成有向图的单源最短路径求解(迪杰斯特拉算法)
20202323 实验九《数据结构与面向对象程序设计》实验报告 - 20202323蒙思洋 - 博客园 (cnblogs.com)
代码托管链接
-
给出statistic.sh的运行结果,统计本学期的代码量。
总计:5317行
课程收获或不足
课程收获:学习java最大的收获就是对java这门语言以及数据结构的框架有了一个大概的了解,让我知道了编程带来的许多好处。而且通过学习这门课,极大的加强了我的自学能力,
王老师上课对算法和结构进行一个统一的讲解,而代码就靠我们自学。最开始感觉编程难度太大了,完全无从下手,在慢慢的学习和尝试之后,通过询问同学,和上CSDN查阅代码之后,
稍微能自己编写一点代码,最终体会到了学习java的乐趣。
不足:平时写的代码较少,编程能力还是太差,不能自己一个人独立写一个比较复杂的程序。