2019-2020-1学期 20192402 《网络空间安全专业导论》第四周学习总结
第8章
8.1
抽象数据类型:属性(数据和操作)明确地与特定实现分离的容器
设计的目的是通过抽象减小复杂程度
可以从:应用层,逻辑层,现实层三个方面观察数据
应用(用户)层:特定问题中的数据的视图
逻辑(抽象)层:数据值(域)和处理它们的操作的抽象视图
实现层明确表示出了存放数据项的结构,并用程序设计语言对数据的操作进行编码
实现层涉及了数据结构,即一种抽象数据类型中的符合数据域的实现
容器存在的唯一目的是存放其他对象
8.2
栈是抽象复合结构,只能从一端访问栈中的元素。可以在第一个位置插入元素,也可以删除第一个元素。后进先出。
另一种描述栈的说法:删除的项总是在栈中时间最短的项目
插入操作没有任何约束,整个LIFO行为都体现在删除操作上
插入操作叫做Push(推进),删除操作叫做Pop(弹出)。
栈没有长度属性,所以没有返回栈中项目个数的操作
需要确定栈是否是空的
8.3
队列中的项目从一端入,从另一端出。先进先出
另一种描述:删除的总是在队列中时间最长的项目
插入操作没有任何约束,整个FIFO行为都体现在删除操作上
8.4
列表有三个属性:项目是同构的,项目是线性的,列表是变长的
每个项目除了第一个都有一个独特的组成部分在他之前,除了最后一个都有一个独特的组成部分在他之后。一个列表至少有三个项目
列表通常提供插入一个项目的操作,删除一个项目的操作,检索一个项目是否存在以及报告列表中项目数量,有一些机制允许用户查看序列中的每一项
因为列表中的项目可被删除和检索,所以列表中的项目必须能够相互比较
数组是内嵌结构,列表是抽象结构
列表也可被形象化为链式结构,链式结构一节点的概念为基础。一个节点由两部分构成:用户的数据和指向列表的下一个节点的链接或指针
列表的最后一个结点的指针变量存放的是表示列表结束的符号
有序列表中,项目之间具有语义关系。除了第一个项目之外所有项目都存在某种排序关系,除了最后一个项目,所有项目都有着相同的关系
8.5.1
二叉树是一种抽象结构,每个节点可以有两个后继节点
树的头部是一个起始节点,叫做根
如果一个节点左边的子节点存在,则这个节点叫做左子女
如果一个节点没有子女,则这个节点叫做树叶
根节点和每个节点之间只有一条路径,除了根节点,每个节点都只有一个父母节点
根节点是书中其他所有节点的前辈
8.5.2
二叉检索树还具有语言属性来刻画树中节点的值:任何结点的值都大于他左子树中的所有结点的值,小于他的右子树中的值
树的形状是由项目插入树的顺序决定的
要输出根的值,必须先输出它的左子树中的所有值,还必须输出他的右子树的值
一个空树的节点数:1加上左子树中的节点个数和右子树中的节点个数
8.6
图:由一组节点和一组把节点相互连接起来的边构成的数据结构
顶点:图中的节点
边(弧):表示图中两个节点的连接的顶点对
无向图:其中边没有方向的图
有向图:其中的便是从一个顶点指向另一个顶点的图
临顶点:通过边连接起来的两个顶点
路径:连接途中两个顶点的一系列点
8.6.2
图搜索方法:深度优先搜索,广度优先搜索,单源最短路搜索
8.7
许多子程序都是高级语言或语言附带库的一部分
参数列表:程序中两部分之间的通信机制
形参:列在子程序后的括号中的标识符
实参:子程序调用中列在括号中的标识符
8.7.2
传递参数的基本方式有两种:通过值传递和通过引用(地址)传递
如果一个形参是值参,调用单元将把实参的一个副本传递给子程序
如果一个形参是引用参数,调用单元将把实参的地址传递给子程序
问题:参数传递的过程 形参和实参的理解
第九章
9.1
面对对象设计的重点是对象以及他们在问题中的交互
9.1.1
对象:在问题背景中相关的事物或实体
对象类:一组具有相似的属性和行为的对象的描述
域:类中的特定项,可以是数据或子程序
方法:定义了类的一种行为的算法
9.1.2
设计方法
1.集体讨论:确定类
2.过滤:对类的整理
3.场景:确定每个类的责任
4.责任算法:类执行职责的方法
9.2
编译器:把高级语言编写的程序翻译成机器码的程序
解释器:输入用高举语言编写的程序,知道计算机执行每个语句指定的动作的程序
高级语言分为两种:需要编译的,需要解释的
字节码:编码Java源代码使用的标准机器语言
Java程序总是被翻译的字节码
9.3
命令式范型:面向过程的范例,面向对象的范例
声明式范型:函数式模型,逻辑模式
9.4
布尔表达式:一个标识符序列,标识符之间由相容的运算符分隔,求得的值是true或false
强类型化:每个变量都有一个类型,只有这种类型的值才能存储到该变量中
数据类型:以阻止以及能够应用于这种类型的值的基本操作集合的说明
9.4
控制结构:确定程序中的其他指令的执行顺序的指令