2019-2020-1学期 20192415
《网络空间安全专业导论》第四周学习总结
第八章 抽象数据类型与子程序
8.1 抽象数据类型
抽象数据类型(Abstract Data Type,ADT):属性(数据与操作)明确地与特定现实分离的容器
容器(container):存放和操作其他对象的对象
数据结构(data structure):一种抽象数据类型中的复合数据域的实现
用户层:特定问题中数据的视图
逻辑层:数据值(域)和处理它们的操作的抽象视图
实现层:明确表示出了存放数据项的结构,并用程序设计语言对数据的操作进行编码
(用明确的数据和子程序表示对象的属性,涉及数据结构)
8.2 栈
栈(Stack):抽象复合结构,只能从一端访问栈中的元素
1.可以在第一个位置插入元素,也可以删除第一个元素
2.LIFO(Last In First Out)
3.删除的项总是在栈中时间最短的项目
4.插入操作(Push推进)没有任何约束;整个LIFO行为都体现在删除操作(Pop弹出)上
5.没有长度属性,没有返回栈中项目个数的操作
6.需要确定栈是否为空,当栈空时再弹出项目会出错
8.3 队列
队列(Queue):一种抽象复合结构,队列中的项目从一端入,从另一端出
1.插入操作在队列的尾部(rar)进行,删除操作在队列的头部(front)进行
2.FIFO
3.删除的总是在队列中时间最长的项目
4.插入操作没有任何约束;整个FIFO行为都体现在删除操作上
8.4 列表
- 列表的列是无止境的
- 列表有三个属性特征:项目是同构的,项目是线性的,列表是变长的
- 插入(Insert),删除(Delete),检索(IsThere),报告(GetLength)
- 项目可以被删除和检索,所以列表中的项目必须能够相互比较
列表≠数组:
数组是内嵌结构 列表是抽象结构 列表应用于数组中
可被形象化为链式结构
链式结构(linked structure):一个将数据项和找到下一项位置的信息保存到同一容器的实现方法
- 无序列表
有序列表:项目之间具有语序关系
8.5 树
分层体系结构
8.5.1 二叉树
二叉树(binary tree):具有唯一起始节点的复合抽象结构,其中每个节点可以有两个子女节点,根节点和每个节点之间都有且只有一条路径
子女:每个节点可以有两个后继节点
根(root):树中唯一的开始节点
叶节点(leaf node):没有子女的树节点
8.5.2 二叉检索法
搜索→构造→输出
任何节点的值都要大于它的左子树中的所有节点的值,并且要小于它的右子树中的所有节点的值
current→节点
iofo(current)→用户数据
left(current)→左子树根节点
right(current)→右子树根节点
null→空值
二叉检索法的搜索效率与树的形状有关
要输出根的值,必须先输出所有比根的值小的值;输出了根的值后,还必须输出所有比根的值大的值。
???
8.6 图
图(garph):由一组节点和一组把节点相互连接起来的边构成的数据结构
顶点(vertex):图中的节点
边(弧)(edge(arc)):表示图中两个节点的连接的顶点对
无向图(undirected graph):其中的边没有方向的图
有向图(directed graph(disgraph)):其中的边是从一个顶点指向另一个顶点(或同一个顶点)的图
用数学语言讲,设G为图,对图的每一条边e来说,都对应于一个实数W(e)(可以通俗的理解为边的“长度”,只是在数学定义中图的权可以为负数),我们把W(e)称为e的“权”。把这样的图G称为“加权图”。
邻顶点(adjacent vertice):通过边连接起来的两个顶点
路径(path):连接图中两个顶点的一系列顶点
8.6.1 创建图
8.6.2 图算法
- 深度优先搜索
栈是一项存储顶点的合适的数据结构。
检查第一个与起点相邻的顶点,若非终点则检查所有与第一个顶点相邻的顶点。
沿着一条路径尽可能深地访问各个节点,如果没有找到终点则回溯。
必须回溯时,选择离你无法走通位置最近的分支继续搜索。
- 广度优先搜索
想要回溯到尽可能远,以找到最初的顶点出发的路径。
栈是按照元素出现的相反的顺序来保存元素。
- 单源最短路搜索
8.7 子程序
许多子程序都是高级语言或语言附带库的一部分。
8.7.1 参数传递
参数列表(parameter list):程序中两部分之间的通信机制
形参(paramter):列在子程序名后的括号中的标识符
看作子程序中使用的临时标志符,定义子程序中的动作。
实参(argument):子程序调用中列在括号中的标识符
实参表示的是调用单元中的真正变量。
调用子程序时传递的实参个数必须与子程序中定义的形参个数相同。二者根据位置匹配。
8.7.2 值参与引用参数
传递参数的基本方式:值传递/引用(地址)传递
值参(value parameter):由调用单元传入实参的副本(写在留言板上)的形参
引用参数(reference parameter):由调用单元传入实参的地址(写在留言板上)的形参
问题
在二叉检索法中,要输出根的值,为什么必须先输出所有比根的值小的值,之后还必须输出所有比根的值大的值?
第九章 面向对象设计与高级程序设计语言
9.1 面向对象方法
9.1.1 面向对象
9.1.2 设计方法
- 集体讨论
产生暂时列表
- 过滤
相同的类,有共同属性和行为的类,不属于问题的解决方案的类→过滤
- 场景
给每个类分配场景,责任将被实现为子程序
封装(encapsulation):把数据和动作的逻辑属性与它们的实现细节分离
- 责任
在面向对象的设计观念,重点是数据而不是动作