2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
抽象数据类型
抽象数据类型:属性(数据和操作)明确地
与特定实现分离的容器
数据结构:一种抽象数据类型中的复合数据
域的实现
容器:存放和操作其他对象的对象
栈
栈是一种抽象复合结构,只能从一端访问。会计师称其
为LIFO,删除的项总是在栈中间时间最短的项目。我们
把项目推进栈,从栈中弹出项目。栈没有长度属性,所
以没有返回栈中项目个数的操作。我们要确定栈是否为
空的操作,因为当栈空的时候再弹出项目会出错
队列
一端入一端出,被称为FIFO,插入操作在尾部进行,删
除操作在头部进行。删除的总是在队列中时间最长的项
目
列表
提供插入一个项目(Insert)、删除一个项目(Delete
)、检索一个项目是否存在(IsThere)以及报告列表中
项目数量(GetLength)。列表可以被形象化为链式结构
链式结构(linked
structure):一个将数据项和找到下一项位置的信息保
存到同一容器的实现方法。
树
二叉树
每个节点可以有两个后继节点,称为子女,树的头部是
一个起始节点,叫做根
树中的每个节点可以有0、1、2个子女,分左子女和右
子女,如果一个节点没有子女,则这个节点叫做树叶
二叉树(binary
tree):具有唯一起始节点(根节点)的抽象复合结构
,其中每个节点可以有两个子女节点,根节点和每个节
点之间都有且只有一条路径。
根(root):数种唯一的开始节点
叶节点(leaf node):没有子女的树节点
二叉检索树
具有二叉树的形状属性,还具有语义属性来刻画节点的
值,像已排序的列表,节点间存在语义排序
抽象数据类型与子程序
抽象数据类型
抽象数据类型:属性(数据和操作)明确地与特定实现分离的容器
数据结构:一种抽象数据类型中的复合数据域的实现
容器:存放和操作其他对象的对象
栈
栈是一种抽象复合结构,只能从一端访问。会计师称其为LIFO,删除的项总是在栈中间时间最短的项目。我们把项目推进栈,从栈中弹出项目。栈没有长度属性,所以没有返回栈中项目个数的操作。我们要确定栈是否为空的操作,因为当栈空的时候再弹出项目会出错
队列
一端入一端出,被称为FIFO,插入操作在尾部进行,删除操作在头部进行。删除的总是在队列中时间最长的项目
列表
提供插入一个项目(Insert)、删除一个项目(Delete)、检索一个项目是否存在(IsThere)以及报告列表中项目数量(GetLength)。列表可以被形象化为链式结构
链式结构(linked structure):一个将数据项和找到下一项位置的信息保存到同一容器的实现方法。
树
二叉树
每个节点可以有两个后继节点,称为子女,树的头部是一个起始节点,叫做根 树中的每个节点可以有0、1、2个子女,分左子女和右子女,如果一个节点没有子女,则这个节点叫做树叶
二叉树(binary tree):具有唯一起始节点(根节点)的抽象复合结构,其中每个节点可以有两个子女节点,根节点和每个节点之间都有且只有一条路径。
根(root):数种唯一的开始节点
叶节点(leaf node):没有子女的树节点
二叉检索树
具有二叉树的形状属性,还具有语义属性来刻画节点的值,像已排序的列表,节点间存在语义排序
在二叉检索树中搜索
构造二叉检索树
输出二叉检索树中的数据
其他操作
图
由一组节点和连接节点的线段组成,图中的节点叫做顶点,线段叫做边(或弧)
图(graph):由一组节点和一组把节点相互连接起来的边构成的数据结构
顶点(vertex):图中的节点
边(弧)(edge(arc)):表示图中两个节点的链接的顶点对
无向图(undirectedgraph):其中边没有方向的图
有向图(directed graph):其中的边是从一个顶点指向另一个顶点(或同一个顶点)的图
邻顶点(adjacent vertice):通过边连接起来的两个顶点
路径(path):连接图上两个顶点的一系列顶点
创建图
1、在表格中添加一个顶点
2、在表格中添加一条边
3、在表格中添加一个权值
图算法
深度优先搜索
用栈储存访问的顶点,检查第一个与起点相邻的顶点,如果它是终点,则搜索结束,否则,检查所有与第一个顶点相邻的顶点
广度优先搜索
在队列前部的路径来自较早出现的顶点,而在队列后部的路径则来自较晚出现的顶点
单源最短路搜索
将路径上边的权值加在一起得到的和最小,称这种抽象容器为优先队列,被检索的元素是在队列中拥有最高优先度的元素
子程序
许多子程序是高级语言或语言附带库的一部分
参数传递
参数列表是子程序要使用的标识符或值的列表
参数列表(parameter list):程序中两部分之间的通信机制
形参(parameter):列在子程序名后的括号中的标识符
实参(argument):子程序调用中列在括号中的标识符
值参与引用参数
值参(value parameter):由调入单元传入实参的副本(写在留言板上)的形参
引用参数(reference parameter):由调用单元传入实参的地址(写在留言板上)的形参
面向对象设计与高级程序设计语言
面向对象方法
用叫做对象的独立实体生成解决方案的问题求解方法,重点是对象以及它们在问题中的交互
面向对象
对象(object):在问题背景中相关的事物或实体
对象类(object class)或类(class):一组具有相似属性和行为的对象的描述。
域(field):类中的特定项,可以是数据或子程序。
方法(method):定义了类的一组行为的特定算法。
设计算法
场景阶段将确定每个类的行为,称类的行为为责任,责任算法阶段将为列出的所有类的责任编写算法
集体讨论
生成解决某个问题要用到的候选类的列表
过滤
确定解决方案中的核心类
场景
给每个类分配责任
封装(encapsulation):把数据和动作集中在一起,使数据和动作的逻辑属性与它们的实现细节分离
责任算法
最终为责任编写算法
一个计算机实例
问题
集体讨论和过滤
责任算法
翻译过程
编译器
编译器(compiler):把用高级语言编写的程序翻译成机器码的程序
解释器
解释器(interpreter):输入用高级语言编写的程序,指导计算机执行每个语句指定的动作的程序
字节码(bytecode):编译Java源代码使用的标准机器语言
程序设计语言的范型
命令式范型
面向过程的范型
命令式模型,语句被分为子程序
面向对象的范型
与对象交互的一种方式,每个对象负责执行它自己的动作
声明式范型
函数式模型
基于函数的数学概念,通过对函数求值实现,问题求解通函数调用实现
逻辑编程
基于象征逻辑的原则,包括关于对象事实和关于对象间关系的规则,一个程序包括向对象和关系询问可以通过事实和规则推演的问题
高级程序设计语言的功能性
布尔表达式
布尔表达式(Boolean expression): 是一个标识符序列,标识符之间由相容的运算符分隔,求得的值是true或false
数据归类
强类型化(strong typing): 每个变量都有一个类型,只有这种类型的值才能储存到该变量中
数据类型(data type):一组值以及能够应用于这种类型的值的基本操作集合的说明
数据类型
整数
一个整数值的范围,由字节数决定
实数
特定精度的数的范围,由字节决定
字符
布尔型
true和false
字符串
字符序列,在某些语言中被看作一个数据值
声明(declaration):把变量动作或语言中的其他实体与标识符关联起来的语句,使程序员可以通过名字引用这些项目
保留字(reserved word):一种语言中具有特殊意义的字,不能用它作为标识符
区分大小写(case sensitive):大写字母和小写字母被看作是不同的;两个拼写方法相同但大小写形式不同的标识符被看作是两个不同的标识符
输入/输出结构
所有的输入语句都由三部分组成,即要存放数据的变量的声明、输入语句和要读入的变量名以及数据流本身
控制结构
控制结构(control structure):确定程序中的其他指令的执行顺序的指令
程序中每个逻辑单元都只有一个入口和一个出口
嵌套逻辑
选择语句可以在循环结构中被嵌套,循环结构可以在选择语句中被嵌套,选择和循环语句可以在子程序中被嵌套,子程序可以在循环或选择结构中被嵌套
异步处理
异步(asynchronous):不与计算机中的其他操作同时发生;换句话说,与计算机的动作不同步
面向对象语言的功能性
封装
封装:实施信息隐蔽的语言特性
对象类或类(问题求解阶段):属性和行为相似的一组对象的说明
对象(问题求解阶段):与问题背景相关的事物或实体
对象(实现阶段)类的一个实例
类(实现阶段)对象的模式
类
像前面的记录,都是异构复合数据类型,类是主动结构,一直把子程序用作域
实例化(instantiate):创建类的对象
继承
继承(inheritance):类获取其他类的属性(数据域和方法)的机制
多态
多态(polymorphism):一种语言的继承体系结构中具有两个同名方法且能够根据对象应用合适的方法的能力
过程设计与面向对象设计的区别
在面向对象的设计中,列表数据结构和子程序需要在类中绑定在一起
在面向过程的版本中,列表被呈现为传递给子程序的记录,以便子程序对其操作
在面向对象的版本中,类对象的实现通过封装实现对用户的隐藏