20202321 邬昱初 2020-2021-2《数据结构与面向对象程序设计》课程内容总结

课程内容总结

第一章 java入门

一、了解课程需要使用的系统及工具

1.Linux的操作
cd:进入指定目录
md:创建新目录
rd:删除文件夹;
del:删除文件;
exit:退出DOS命令行;
Help:想知道某个功能的用法时,输入命令 help 命令名 ,就会列出该功能的使用方法

2.博客园

3.码云

4.VIM基础
三种模式的切换:i a插入模式 wq命令行模式 ESC普通模式
i插入
q删除
y复制
n查找
ddp剪切粘贴

5.集成开发环境IDEA

二、jav语言的初步了解

1.java简介
java是一种面向对象的编程语言

2.java程序基础结构

由类和方法构成主体

注释可用三种方式表示
//
/' '/
/'' '/

编程时在程序中自己或程序语言所命名的单词被称作标识符,主要由字母、数字、下划线组成,同时标识符对大小写有区分

保留字是具有特殊意义的一组标识符,按预先的定义使用

空格符包括了空格、tab和回车键

第二章 数据与表达式

一、数据

1.数据的输出

通常以System.out.println或System.out.print进行数据的输出
其中System.out.println表现为跳行如:
System.out.println("1")
System.out.println("2")
1
2

System.out.print("1")
System.out.print("2")
12

2.变量
对于在编程中可以改变的量被称为变量,
其中以final开头的对为常量

3.数据类型
分为八种
byte、short、int、long、float、double、char、boolean

二、表达式

1.数据表达式

加减乘除模:+-*/%

前缀表达式、中缀表达式、后缀表达式,如:
中缀 (3 + 4) × 5 - 6
前缀 - × + 3 4 5 6
后缀 3 4 + 5 × 6 -

2.类型的转换

扩展类型数据转换:小变大
压缩类型数据转换:大变小
数据类型转换3种方式:
赋值类型转换、提升类型转换、强制类型转换

第三章 类与对象

类是由属性和方法构成的

包需要用import进行引入,自己编的一组程序也可以成为包

系统自带包有很多,其中
java.nio
java.io
java.util
等在实验的使用次数较多

String类:创建的String类的长度就不会改变

Random类:属于java.util包,是随机生成器

Math类:所有方法都是静态的

第四章 编写类(封装、继承、多态)
一、封装
1.UML类图
2.隐藏对象内部的复杂性,只对外公开简单的接口,便于外界使用,从而提高系统的扩展性、可维护性。
3.特性:不允许对象的代码直接访问变量,只能调用
4.public、private

二、继承
1.继承是从已有类派生一个新类的过程。
2.类的继承格式
class 父类{};
class 子类 extends 父类{};
interface 父类{};
class 子类 implements 父类{};
super可以实现对父类的访问 this指向自己

3.方法的重写

4.抽象类
在类层次结构中,高层很多设计为抽象类。
接口类:常量+抽象方法
抽象类:常量/变量+抽象/非抽象方法

抽象类不能被实例化
抽象类中的方法必须使用abstract修饰

三、多态

1.多态性是指允许不同软件元素对同一消息作出响应,赋值之后,父类型的引用就可以根据当前赋值给它的子对象的特性以不同的方式运作

2.多态引用可以在不同的时候指向不同类型的对象

第五章 条件判断与循环
一、比较

1.普通数据比较

2.浮点数比较:Math.abs(r1-r2) < 0.0001,接近认为相等

3.compareTo 返回非布尔值 equals 返回布尔值

4.对象比较:要implements Comparable接口

二、条件判断
1.if语句

2.switch语句
三、循环
1.while语句

2.do 语句

3.for 语句

第六章.数组

第七章.查找与排序
一、查找
线性查找:两种方式,可以设置哨兵完成

二分查找:从中间开始,要求表是有序的

分块查找:先二分查找,再线性查找

哈希查找:直接通过关键字找到存储地址

二、排序
选择排序:将每个值放在排好序的位置

插入排序:将一个具体的值插入到表中已有序的子系列中

冒泡排序:比较表中的相邻元素,如果它们不符合要求则交换他们。

快速排序:根据一个任意选定的划分元素来对表进行划分,然后再递归地对划分元素两边的字段进行排序

归并排序:递归地对分表,知道每个子表只含有一个元素时为止,然后再将子表按序合并

第八章.队列

1.只能在队头删除,队尾插入
2.特性:先进先出
3.定义方法
enqueue、first、dequeue、isempty、size、toString
4.线性表是具有相同特性数据元素的有限序列
5.栈队列是特殊的线性表

第九章.栈
一、集合
1.集合是组织其他对象的对象,它定义了访问及管理成为集合元素的其他对象的方式

2.集合中元素之间的组织方式通常由它们加入集合的次序和元素之间的关系决定

二、栈
1.特性:后进先出
2.系统栈定义的部分方法:
push 添加元素到栈顶

pop 删除栈顶元素

peek 查看栈顶元素

isEmpty 判断栈是否为空

size 判断栈中元素的个数

第十章.树
一、树
1.树是非线性结构

2.树可以通过链表和数组实现

3.树由节点和边组成

3.满二叉树和完全二叉树
二、树的遍历
四种遍历方式:
先序遍历

中序遍历

后序遍历

层序遍历
三、二叉树的实现

查找类:
getRoot()返回根节点 getParent()返回父结点 getChildCount返回子结点数 getFirstChild()返回第一个孩子结点 getNextChild()返回下一个兄弟结点

isEmpty()判断是否为空树 depth()求树的深度 traverse()遍历树

插入类:
tree()构造函数

assign()结点赋值

insert()插入操作

删除类:
makeEmpty()将树清空 Delete()删除操作,可以是节点或子树

三、堆
1.堆是一种完全二叉树
addElement removeMin removeMax findMin等方法
2.堆排序
小顶堆

大顶堆

第十一章.图
一、图的概念
1.组成
顶点(vertex)

边(edge)
2.分类
无向图 所有的边都没有方向性
有向图 边是有方向性的
带权图 边对应权值,也称为网络
3.度
(1).连接顶点的边的数量称为该顶点的度,记为D(V)。

(2).有向图有入度和出度
入度是以该顶点为端点的入边数量, 记为ID(V)。
出度是以该顶点为端点的出边数量, 记为OD(V)。
二、常用的图算法
1.图的实现

邻接表和相邻接矩阵
2.遍历
广度优先遍历
深度优先遍历

3.无向图的最小生成树
Prim算法
Kruscal算法

4.有向图的拓扑排序

5.有向图的最短路径求解

作业

作业一:第一章和第二章测试活动

作业二:类和对象

作业三:实验三的做实验内容,即封装继承多态,单元测试、UML的实现

作业四:第四章和第五章测试

作业五:第六章和第七章测试

作业六:封装继承多态重写重载文件字符字节读写

作业七:实现自己的ArrayList(实现增加、删除、修改、查找、判断是否为空、返回list长度等操作)

作业八:第九、十、十一章继承多态异常

作业九:实验四内容截图加学号水印

作业十:ArrayStack测试

作业十一:尾插法

作业十二:栈应用—进制转换

作业十三:树和图

作业十四:最小生成树测试

作业十五:栈和队列测试

作业十六:快速排序测试

作业十七:最后一次测试

实验报告链接

实验一 实验名称:

基于命令行进行简单的Java程序编辑、编译、运行和调试。

练习Linux基本命令;

学习Java程序的JDB调试技能:

编写简单的Java程序。

https://www.cnblogs.com/maruforever/p/15324550.html

2、实验二 实验名称:

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

https://www.cnblogs.com/maruforever/p/15357511.html

3、实验三 实验名称:

(1)初步掌握单元测试和TDD
(2)理解并掌握面向对象三要素:封装、继承、多态
(3)初步掌握UML建模
(4)完成蓝墨云上 (1)-(5)实验。

https://www.cnblogs.com/maruforever/p/15400008.html

4、实验四 实验名称:

(一)Java Socket编程

(二)Java和密码学

(三)编写有理数/复数计算器

(四)远程有理数计算器

(五)远程复数计算器

https://www.cnblogs.com/maruforever/p/15762000.html

5、实验五实验六 实验名称:

链表练习

在android平台上实现实验

https://www.cnblogs.com/maruforever/p/15522208.html

6、实验七 实验名称:

(1)、定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。

(2)、重构你的代码
把Sorting.java Searching.java放入 cn.edu.besti.cs2023.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301)
把测试代码放test包中

(3)、参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试

(4)、实现排序方法等(至少3个)
测试实现的算法(正常,异常,边界)

(5)、编写Android程序对实现各种查找与排序算法进行测试

https://www.cnblogs.com/maruforever/p/15552173.html

7、实验八 实验名称:

(1)、参考教材PP16.1,完成链树LinkedBinaryTree的实现

(2)、基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能

(3)、自己设计并实现一颗决策树

(4)、输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果

https://www.cnblogs.com/maruforever/p/15616645.html

8、实验九 实验名称:

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

https://www.cnblogs.com/maruforever/p/15720934.html

代码托管链接

https://gitee.com/wu-yuchu/javastudy

课程收获与不足

收获:学会了自主学习和自我钻研。
不足:编程能力有待提高,练习量还是太少。
自己需要改进的地方
容易因找不到出错源或是解决不了系统提供问题就心浮气躁,这点需要改进,以及需要多看课本。
结对学习是不是真正贯彻了?写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
没有贯彻,本学期的结对学习我只是参考了他人的运行模式,然后自己独自完成了双方代码的编写和运行,希望下一次可以真正做到结对学习

posted on 2022-01-02 18:49  MaruForever  阅读(50)  评论(1编辑  收藏  举报

导航