第8章 抽象数据程序与子程序
8.1 抽象数据类型
抽象数据类型 (ADT) 属性(数据和操作)明确地与特定实现分离的容器
在计算领域,可以从应用层、逻辑层和实用层三个方面观测
数据结构 一种抽象数据类型中的复合数据域的实现
容器 存放和操作其他对象的对象
8.2 栈
LIFO(意为后进先出),可在第一个位置插入元素(Push),也可以删除第一个元素(Pop)。一种访问方式的说法为只能从一端访问;另一种访问方式的说法为删除的项总是在栈中时间最短的项目
8.3 队列
FIFO(先进先出)队列中的项目从一端入,从另一端出;另一种说法是删除的项总是在丢列中时间最长的项目。
8.4 列表
属性:项目是同构的、项目是线性的(每个项目除了第一个都有一个独特的组成部分在它之前,除了最后一个也都有一个独特的组成部分在它之后)、列表是变长的
除允许Insert、Delete、IsThere、GetLength外,有些机制允许查看序列中的每一项(Reset,GetNext,MoreItems)
因为项目可以被删除和检索,所以列表中的项目能够相互比较
列表也被称为链式结构 一个将数据项和找到下一项位置的信息保存到同一容器的实现方法
8.5 树
比栈和列队有更复杂的分层,每一个节点下方都有很多节点
二叉树
一种抽象结构,其中每个节点可以有两个后继节点,叫做子女;树的头部是一个起始节点,叫做根,它不是任何节点的子女
如果一个节点右边的子节点存在,则这个子节点被称为右子女;如果一个节点没有子女,这个节点被称为树叶
二叉检索树
有二叉树的形状属性,还有语义属性来刻画树中节点上的值
- 在二叉检索树中检索
如果current指向一个节点,那么info(current)指的就是这个节点中的用户数据,left(current)指向的是current的左子树的根节点,right(current)指向的是current的右子树的根节点。如果一个指针是null,则子树是空的 - 构造二叉检索树
比较根节点和下一插入值的大小 - 输出二叉检索树的数据
先输出左子树的所有值,即所有比根小的值
8.6 图
树是表示存在层次结构关系的有效方式,一个节点至多只有一个指向父母,如果没有这种约束,就得到了图
图 由一组节点和一组节点相互连接起来的边构成的数据结构
顶点 图中的节点,如果两个顶点有一条边相连则称为邻顶点
边(弧) 表示图中两个节点的连接的顶点对
无向图 边没有方向的图
有向图 其中的边是从一个顶点指向另一个顶点(或同一个顶点)的图
路径 连接图中两个顶点的一系列顶点
*图的创建和图算法
创建一个表格
- 在表格中添加一个顶点
- 在表格中添加一条边
- 在表格中添加一个权值
图算法
- 深度优先算法 用栈来存储访问的顶点。用深度优先搜索来检查第一个与起点相邻的顶点。如果是它是终点,则搜索结束。否则,检查所有与第一个顶点相邻的顶点
- 广度优先搜索 用队列来保存元素的顺序。优先检查所有与起点相邻的顶点,而不是检查与这些顶点相邻的其他顶点
- 单源最短路搜索 被检索的元素是队列中拥有最高优先度的元素,称为优先队列
8.7 子程序
用非递归的上下文来审视子算法并讨论怎样能来回在算法和子算法间传递信息。许多子程序是高级语言或语言附带库的一部分
参数传递
参数列表 程序中两部分之间的通信机制
形参 列在子程序名后的括号中的标识符
实参 子程序调用中列在括号中的标识符
值参与引用参数值参
值参 由调用单元传入实参的副本(写在留言板上)的形参
引用参数 由调用单元传入实参的地址(写在留言板上)的形参
—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
第九章 面向对象设计与高级程序设计语言
9.1 面向对象设计方法
数据和处理数据的算法绑定在一起,每个对象负责自己的处理
对象 在问题背景中相关的事物或实体
对象类/类 一组具有相似的属性和行为的对象的描述
字段 表示类的属性
方法 定义了类的一种行为的特定算法
设计方法
- 头脑风暴
- 过滤
- 场景(这个阶段的目标是给每个类分配责任)
- 责任算法
- 总结
封装 把数据和动作集中在一起,使数据和动作的逻辑属性与它们的实现细节分离
9.2 翻译过程
编译器
用高级语言编写的程序翻译成机器码的程序
解释器 输入用高级语言编写的程序,指导计算机执行每个语句指定的动作的程序
字节码 编译Java源代码使用的标准机器语言
9.3 程序设计语言范型
范型 用作模式或模型的实体
命令式范型
- 面向过程的范型
- 面向对象的范型
声名式范型
- 函数式模型
- 逻辑编程
9.4 高级程序语言的功能性
布尔表达式 一个标识符序列,标识符之间由相容的运算符分隔,求得的值是true或false
数据归类
- 强类型化 每个变量都有一个类型,只有这种类型的值才能存储到该变量中
- 数据类型 一组值以及能够应用于这种类型的值的基本操作集合的说明,包括整数、实数、字符、布尔型、字符串等
声明 把变量、动作或语言中其他实体与标识符关联起来的语句,使程序员可以通过名字引用这些项目
保留字 一种语言中具有特殊意义的字,不能用它作为标识符
区分大小写 大写字母和小写字母被看作是不同的;两个拼写方法相同但大小写形式不同的标识符被看作是两个不同的标识符
输入输出结构
控制结构 确定程序中的其他指令的执行顺序的指令
- 嵌套逻辑
- 异步处理
9.5 面向对象语言的功能性
封装 实施信息隐蔽的语言特性
对象(问题求解阶段) 与问题背景相关的事物或实体
类(实现阶段) 对象的模式
6对象类或类(问题求解阶段) 属性和行为相似的一组对象的说明
对象(实现阶段) 类的一个实例
类
实例化 创建类的对象
继承 类获取其他类的属性(数据字段和方法)的机制
** 多态** 语言在运行时确定给定调用将执行哪些可能的方法的能力
9.6 过程设计与面向对象设计的区别
面向过程的版本中,列表被呈现为传递给子程序的记录;面向对象的版本中,类对象的实现通过封装实现对用户的隐藏