2021-2022——1学期20212304《网络空间安全导论》第四周学习总结
《计算机科学概论》第8,9章学习总结
第八章:抽象数据类型与子程序
8.1抽象数据类型
抽象数据类型(ADT):属性(数据和操作)明确地与特定实现分离的容器
在计算领域,可以从三个方面观察数据:
1.应用(或用户层)是特定问题中的数据的视图
2.逻辑(或抽象层)是数据值(域)和处理它们的操作的抽象视图
3.实现层明确表示出了存放数据项的结构,并用程序设计语言对数据的操作进行编码
数据结构:一种抽象数据类型中复合数据域的实现
容器:存放操作和其他的对象的对象
8.2栈
栈是一种抽象复合结构,只能从一端访问栈中的元素。
可以在第一个位置插入元素,也可以在第一个位置删除元素。这种类型的处理称为先进后出(LIFO),都体现在删除操作上,插入操作没有任何约束。
- 删除的项总是在栈中时间最短的项目
- 插入操作叫Push(推进),删除操作叫Pop(弹出)
- 栈没有长度属性,故无返回栈中项目个数的操作
- 我们需要的是确定栈知否为空的操作,因为当栈空的时候再弹出项目会出错
8.3队列
队列也是一种抽象结构,队列中的项目从一端输入,从另一端输出,这种行为称为先进先出(FIFO),都体现在删除操作上,插入操作没有任何约束。
- 插入操作都在队伍尾部进行,删除操作在队伍头部进行。
- 删除的总是在队列中时间最长的项目
8.4列表
列表的三个属性特征:1.项目是同构的;2.项目是线性的;3.列表是变长的
- 数组是内嵌结构,列表是抽象结构
链式结构:一个将数据项和找到下一个项位置的信息保存到同一容器的实现方法。
无序列表的顺序并不重要,项目只是被随意放入其中;
有序列表中,项目之间具有语义关系。除了第一个项目之外所有项目都存在某种排序关系;除了最后一个项目,所有项目都有着相同的关系。
列表的最后一个节点的指针变量存放的是表示列表结束的符号,通常为null,用“/”表示。
8.5树
树:一种分层体系,类似于一个无序列表。
二叉树:具有唯一起始节点(根节点)的抽象复合结构,其中每个节点可以有两个子女节点,根节点和每个节点之间都有且只有一条路径。
根:树中唯一的开始节点。除了根节点以外,每个节点都只有一个父母节点。
叶节点:没有子女的树节点。
二叉检索树节点间存在语意排序,即任何节点的值都要大于它左子树中所有节点的值,并且小于它右子树中的所有节点的值。
- 二叉检索树的搜索效率与树的形状有直接关系;树的形状是由项目插入树的顺序决定的。
- 要输出根的值,必须先输出它的左子树中的所有值,即所有比根的值小的值;然后还必须输出它的右子树中的所有值,即所有比根的值大的值
8.6图
图:由一组节点和一组把节点相互连接起来的边构成的数据结构。
顶点:图中的节点。
边(弧):表示图中两个节点的连接的顶点对。
无向图:其中的边没有方向的图。
有向图:其中的边是从一个顶点指向另一个顶点(或同一个顶点)的图。
邻顶点:通过边连接起来的两个顶点。
路径:连接图中两个顶点的一系列顶点。
列表,栈,队列和树都是可容纳元素的容器。栈返回的元素是在容器中停留时间最少的元素;队列是时间最长的;队列和树返回的信息都是被请求的。
- 三种图搜索算法:
1.深度优先搜索:走向最深的分支,当必须回溯时,选择离无法走通的最近的分支继续搜索。即相比于更早时候可选的其他分支,会选择一条尽可能走远的路。————对应栈
2.广度优先搜索:优先检查所有与起点相邻的顶点,而不是检查与这些顶点相连的其他顶点。————对应队列
3.单源最短路搜索:想检索与当前顶点相连的边权值最小的顶点。这种抽象容器称为优先队列
8.7子程序
参数列表:程序中两部分之间的通信机制
形参:列在子程序名后的括号中的标识符
实参:子程序调用中列在括号中的标识符
因实参和形参是根据位置匹配的,故其名字不必一致。以这种方式传递的形参通常叫作位置形参
值参:由调用单元传入实参的副本(写在留言板上)的形参。
引用参数:由调用单元传入实参的地址(写在留言板上)的形参。
子程序接收的只是实参的一个副本,并不能改变实参的内容,只修改副本不会改变原始变量。
并非所有高级语言都支持这两种类型的参数。
第九章:面向对象设计与高级程序设计语言
9.1面向对象的方法
面向对象的设计方法是用叫作对象的独立实体生成解决方案的问题求解方法,对象由数据和处理数据的操作构成。
自顶向下设计的重点是任务,面向对象设计的重点是对象以及它们在问题中的交互。
自顶向下的设计方法重点在于把输入转化成输出的过程,结果将生成任务的体系结构。面向对象设计的重点是要转换的数据对象,结果生成的是对象的体系结构。
对象:在问题背景中相关的事物或实体。
对象类或类:一组具有相似的属性和行为的对象的描述。
字段:表示类的属性。
方法:定义了类的一种行为的特定算法。
分解过程的四个阶段:
1.头脑风暴:确定问题中的类。
2.过滤:回顾上阶段确定的类并进行筛选。
3.场景:给每个类分配责任。
由于每个类只对自己负责,所以称类的行为为责任。责任由两种类型:
(1)类自身必须知道什么(知识)(2)类必须能够做什么(行为)
封装:把数据和动作集中在一起,使数据和动作的逻辑属性与它们的实现细节分离。封装是抽象的关键。
4.责任算法:为列出的所有类的责任编写算法。
9.2翻译过程
把汇编语言指令翻译成机器码的算法非常简单,即每条指令只执行一项基本操作。
编译器:把用高级语言编写的程序翻译成机器码的程序。
想要在多种类型的机器上使用一种高级语言,就要具备这种语言的多个编译器。
解释器:输入用高级语言编写的程序,指导计算机执行每个语句指定的动作的程序。
第二代感激语言可分为两种:1.要编译的;2.要解释的。
由于软件解释器非常复杂,所以用要解释的语言编写的程序通常比要编译的程序的运行速度慢很多。
字节码:编译Java源代码使用的标准机器语言。
9.3程序设计语言范型
1.命令式范型:具有顺序执行指令的特征,变量的使用代表了内存地址,而使用赋值语句则改变这些变量的值。
(1)面向过程的范型(2)面向对象的范型
2.声明式范型:是描述结果的模型,但完成结果的过程不被描述
(1)函数式(2)逻辑式
9.4高级程序设计语言的功能性
布尔表达式:一个标识符序列,标识符之间由相容的运算符分隔,求得的值是true或falsse。
强类型化:每个变量都有一个类型,只有这种类型的值才能存储到该变量中。
数据类型:一组值以及能够应用于这种类型的值的基本操作集合的说明。
声明:把变量、动作或语言中的其他实体与标识符关联起来的语句,使程序员可以通过名字引用这些项目。
保留字:一种语言中具有特殊意义的字,不能用它作为标识符。
区分大小写:大写字母和小写字母被看作是不同的;两个拼写方法相同但
9.5面向对象语言的功能性
收获
了解了列表,栈,队列,树和图这几种抽象复合结构以及子程序和参数的相关知识。
posted on 2021-10-24 20:23 20212304杨璞华 阅读(96) 评论(1) 收藏 举报
浙公网安备 33010602011771号