2021年10月16日 2021-2022第一学期20212303《网络空间安全专业导论》第四周学习总结
第8章
抽象数据类型与子程序
8.1抽象数据类型
抽象数据类型(ADT)是指一个数学模型及定义在该模型上的一组操作。它仅取决于其逻辑特征,而与计算机内部如何表示和实现无关。
数据结构 = 数据 + 组成方式;
数据类型 = 数据 + 处理方式。
抽象数据类型 = 一组特定的数据类型+在该数据之上的一组操作
通俗理解:根据定义抽象数据类型的定义,它还包括该模型上的一组操作。就像“超级玛丽”这个经典的任天堂游戏,里面的游戏主角是马里奥,我们给他定义了基本操作,前进、后退、跳、打子弹等。这就是一个抽象数据类型,定义了一个数据对象、对象中各元素之间的关系及对数据元素的操作。至于,到底是哪些操作,这只能由设计者根据实际需要来定。像马里奥可能开始只能走和跳,后来发现应该增加一种打子弹的操作,再后来又有了按住打子弹键后前进就有跑的操作。这都是根据实际情况来定的。 引用自一篇博客的文章:了不起de狐狸爸爸的博客:什么是抽象数据类型。
你玩英雄联盟操作的英雄本质上就是一种抽象数据类型(ADT),他的底层是由很多基本数据类型构成的,并且还定义了在数据上的很多操作,比如我们的德玛西亚:他的英雄属性,比如生命值、攻击力、攻击速度,就是很多基本数据类型。
他的操作技能,比如致命打击 (Q)、德玛西亚正义(R)就是数据上的操作。
基本数据组合、数据上的操作,加在一起就成了抽象数据类型;英雄属性、操作技能,加在一起就成了德玛西亚!
下一次玩英雄联盟的时候,记住:你玩的不是英雄,是一种抽象数据类型!
感觉这个作者的解释很通俗
作者:Mr.A2N
链接:https://www.zhihu.com/question/24268274/answer/151862337
来源:知乎
这个非常抽象,这一段可以帮助理解
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合
数据类型:一个值的集合+定义在这个值集上的一组操作
抽象数据类型:一个数学模型+定义在该模型上的一组操作
数据结构:一种抽象数据类型中的复合数据域的实现
容器:存放和操作其它对象的对象
8.2 8.3 栈 队列
本质上,栈和队列都是线性表,只是根据操作的需求我们人为地在线性表上加上限制,形成了两种具有独特功能的数据结构。
栈
首先,普通的线性表实现是有两个端口可以访问的,但是如果作为栈就要封闭一端(就和六出祁山一样,只能前进)。只能访问另一端。这当然不是自讨苦吃,栈是一种抽象数据结构,是对现实世界对象的模拟。
比如,自助餐厅中的一叠盘子,新盘子放在这一叠盘子的最上面,取得时候也是从最上面取。将其抽象出来就是栈,这是最合适的抽象方式。
队列
队列是一种简单的等待序列,在尾部加入元素时队列加长,在前端删除数据时队列缩短。与栈不同,队列是一种使用两端的结构:一端用来加入新元素,另一端用来删除元素。队列是先进先出的结构。
8.4列表
链式结构:
一个将数据项和找到下一项位置的信息保存到同一容器的实现方式
不要把列表误认为是数组:
数组:数组是列表的一种特殊实现形式,数据存储是有序的,是通过索引来对数组进行访问(列表中没有索引),下表从0开始;
列表:
在编程语言中的常见表现形式有数组和链表,栈和队列是两种特殊的链表。
8.5树
利用更复杂的结构表示更复杂的关系。在计算领域,通常所说的的二叉树
8.5.1二叉树
具有唯一起始节点的抽象复合结构,其中每个节点可以有两个子女节点,根节点和每个子女节点间有且只有一条路径
根:树中唯一的开始节点
叶节点:没有子女的树节点
8.5.2二叉检索树
二叉检索树任何节点的值都要大于它左子树中的所有节点的值,并且要小于它的右子树中的所有节点的值
8.6图
表示层次结构关系的一种有效方式
图:由一组节点和把节点连接起来的边组成的数据结构。
顶点:图中的节点
边:表示图中的两个节点连接的顶点对
无向图:边无方向
有向图:边是从一个顶点指向另一个顶点的有方向箭头
邻顶点:通过边连接起来的两个顶点
路径:连接图中两个顶点的一系列顶点
顶点的对象可以是任何概念
8.6.1创建图
8.6.2图算法
1.深度优先搜寻 能否搭乘最喜爱的航班从A到B
2.广度优先搜索 能否用最少的停顿从A到B
3.单源最短路线搜索:能否用最短路线从X到Y
8.7子程序
8.7.1参数传递
参数列表:程序中两部分之间的通信机制
形参:列在子程序名后的括号中的标识符
实参:子程序调用中列在括号中的标识符
8.7.2值参与引用参数
值参:由调入单元传入实参的副本(写在留言板上)的形参
引用参数:由调用单元传入实参的地址(写在留言板上)的形参

浙公网安备 33010602011771号