第一章 编程的步骤与要求 2
1.1 什么是程序、什么是软件 2
第一篇 编程的一些问题 2
1.2 编程的几个阶段 3
1.2.1 编程的几个阶段 3
1.2.2 研制大型软件(程序)系统的几点要求 5
1.3 程序设计的思维方法 7
1.3.1 算法含义 7
1.3.2 算法设计的基本思路 7
1.4 如何评价程序 9
2.2 什么是结构化程序设计 12
第二章 结构化程序设计 12
2.1 一种新的编程方法 12
2.3 结构化程序设计的方法 13
2.3.1 不用或少用GOTO语句 13
2.3.2 自顶向下,逐步求精 16
2.3.3 分层结构与模块结构 19
2.3.4 组织形式 19
2.4 结构化系统分析与设计 19
2.4.1 结构化系统分析 20
2.4.2 结构化系统设计 20
3.1 程序设计语言分类 21
第三章 结构化程序语言 21
3.2 程序语言的选择 22
3.3 结构化语言的特点 23
练习与思考题 25
参考文献 25
第二篇 数据结构 28
第四章 数据结构基本概念 28
4.1 什么是数据结构 28
4.2 为什么要研究数据结构 28
4.3 数据结构分类 29
4.4 数据结构中若干常用术语 30
4.5 算法语言 31
第五章 向量和数组 34
5.1 向量 34
5.1.1 向量的定义 34
5.1.2 向量的物理表示 35
5.1.3 向量的性质 35
5.1.4 向量运算 36
5.2 数组 36
5.2.1 数组的定义 36
5.2.2 数组的物理表示 37
5.2.3 效率问题 39
5.3 稀疏数组 40
第六章 栈与队列 43
6.1 栈 43
6.1.1 栈的定义与物理表示 43
6.1.2 栈的运算 44
6.1.3 多栈共享邻接空间 45
6.2 栈的应用 47
6.3 队列 50
6.3.1 队列的定义与物理表示 50
6.3.2 队列运算 50
6.4.1 循环队的循环原理 52
6.4 循环队 52
6.4.2 循环队运算 53
6.5 队列的应用 54
第七章 链表 55
7.1 单向链表 55
7.1.1 单向链表的结构形式 55
7.1.2 链表运算 56
7.2 链表的存储空间 59
7.3 链接的栈和队列 61
7.4 循环链表 63
7.5 双向链表 64
7.6 链表的应用——一元多项式相加 66
7.7 十字链表 68
7.8 广义表及其应用 70
第八章 串 74
8.1 串的定义 74
8.2 串的物理表示 74
8.2.1 串的顺序表示法 75
8.2.2 串的链表表示法 77
8.3 串的运算 77
8.4 串的模式匹配 78
8.5 串的插入算法 81
第九章 树 83
9.1 树的基本概念 83
9.1.1 树的定义 83
9.1.2 树的基本术语 83
9.1.3 树结构的表示方法 84
9.2 二叉树 86
9.2.1 二叉树的定义 86
9.2.2 二叉树的性质 87
9.2.3 二叉树的物理表示 90
9.3.2 森林的二叉树表示 92
9.3.1 树的二叉树表示 92
9.3 树和森林转换成二叉树 92
9.4 遍历二叉树 94
9.4.1 前序遍历 94
9.4.2 中序遍历 95
9.4.3 后序遍历 96
9.5 线索二叉树 98
9.5.1 在二叉树中寻找结点的前驱和后继 98
9.5.2 在线索树中求结点的前驱和后继 98
9.5.3 二叉树线索化算法 100
9.5.4 结点插入中序线索二叉树 101
9.6.1 树的路径长度 102
9.6 哈夫曼树 102
9.6.2 哈夫曼树及其算法 103
9.6.3 哈夫曼树的应用 105
9.7 树的应用 106
9.7.1 二叉分类树 106
9.7.2 判定树 107
9.7.3 集合的表示法 109
第十章 图 114
10.1 图的基本概念 114
10.2.1 邻接矩阵法 115
10.2 图的物理表示 115
10.2.2 邻接表法 116
10.2.3 邻接多重表法 117
10.3 图的遍历与求图的连通分量 118
10.3.1 纵向优先搜索法 118
10.3.2 横向优先搜索法 120
10.3.3 求图的连通分量 120
10.4 生成树和最小代价生成树 122
10.4.1 什么是生成树和最小代价生成树 122
10.4.2 最小代价生成树的构造方法 123
10.5.1 从某个源点到其它顶点的最短路径 126
10.5 最短路径 126
10.5.2 每对顶点间的最短路径 128
10.6 拓扑排序 130
10.6.1 AOV网络与拓扑排序 131
10.6.2 拓扑排序算法 131
10.7 关键路径 133
10.7.1 什么是关键路径 134
10.7.2 e(i)和l(i)的求法 135
10.7.3 AOE网络的关键活动 135
11.1 排序 137
11.1.1 排序文件的物理表示 137
第十一章 排序与查找 137
11.1.2 选择排序 138
11.1.3 冒泡排序 139
11.1.4 线性插入排序 140
11.1.5 折半插入排序 141
11.1.6 希尔排序 142
11.1.7 快速排序 143
11.1.8 各种排序方法的比较 144
11.2.1 查找方法评价 145
11.2 查找 145
11.2.2 顺序查找法 146
11.2.3 折半查找法 146
11.2.4 分块查找法 147
11.2.5 几种基本查找方法的比较 148
11.3 哈希方法 149
11.3.1 构造哈希函数的几种方法 150
11.3.2 处理冲突的方法 152
练习与思考题 156
参考文献 160
12.1.1 源程序和目标程序 162
12.1 从源程序到目标程序 162
第十二章 编译工作的基本概念 162
第三篇 编译技术 162
12.1.2 汇编程序 163
12.1.3 编译程序 163
12.1.4 解释程序 163
12.2 编译程序的工作过程 164
12.3 编译程序与其它软件工具 166
12.3.1 编辑程序 166
12.3.2 装入程序与连接程序 166
12.3.3 排错程序 167
13.1 单词符号的种类和输出形式 168
第十三章 词法分析 168
13.2 读字符程序 170
13.2.1 读字符准备 170
13.2.2 超前搜索问题 170
13.3 词法分析的方法 171
13.3.1 直接分析法 172
13.3.2 状态转换图法 172
第十四章 语法分析 176
14.1 语言定义与语法结构 176
14.1.1 形式语言描述 176
14.1.2 文法和语言种类 178
14.1.3 文法如何定义语言 180
14.2 语法分析工作的内容 181
14.3 语法分析的方法 182
14.3.1 优先矩阵法 182
14.3.2 优先数法 187
14.3.3 状态矩阵法 190
14.3.4 递归子程序法 195
14.4 各种语法分析方法的比较 198
第十五章 中间语言及其优化 200
15.1 如何从单词符号产生出中间语言 200
15.2.1 逆波兰表示法 201
15.2 几种常用的中间语言 201
15.2.2 四元组表示法 202
15.2.3 三元组表示法 203
15.3 代码优化 204
第十六章 符号表和存储分配 204
16.1 符号表的结构 207
16.2 符号表的组织及操作 209
16.2.1 符号表的操作 209
16.2.2 标识符的局部性问题及其处理 210
16.3 存储空间分配 211
16.3.1 静态分配存储单元 211
16.3.2 动态分配存储单元 212
第十七章 出错处理 214
17.1 错误种类 214
17.1.1 拼写错误 214
17.1.2 语法错误 214
17.1.3 语义错误 215
17.2 错误处理 215
17.3 遏止株连信息和重复信息 216
17.3.1 遏止株连信息 216
17.3.2 遏止重复信息 217
练习与思考题 218
参考文献 219
第四篇 计算机操作系统 222
第十八章 操作系统概论 222
18.1 设置操作系统的目的 222
18.1.1 计算机的硬件组织 222
18.1.2 软件的层次和虚拟机的概念 223
18.1.3 设置操作系统的目的 223
18.2 操作系统的发展过程 224
18.2.1 手工操作阶段 224
18.2.2 早期批量处理阶段 224
18.3 操作系统的功能和类型 225
18.2.4 多道程序的出现和操作系统的形成 225
18.2.3 管理程序阶段 225
18.3.1 多道批处理系统 226
18.3.2 分时系统 226
18.3.3 实时系统 226
第十九章 操作系统的基本功能 228
19.1 处理机管理 228
19.1.1 中断处理 228
19.1.2 处理机调度(处理机分配)和进程调度 229
19.2 存储管理 233
19.2.1 存储管理的功能 233
19.2.2 界地址存储管理 234
19.2.3 虚拟存储的基本概念 235
19.2.4 分页存储管理 236
19.2.5 分段存储管理 237
19.2.6 段页结合存储管理 238
19.2.7 虚拟存储管理中的存储保护 239
19.3 设备管理 239
19.3.1 外部设备分类和设备管理的功能 239
19.3.2 外部设备的中断 239
19.3.3 分配和驱动外部设备 240
19.3.4 实现虚拟设备 242
19.4.1 文件与文件管理系统 243
19.4 文件管理 243
19.4.2 文件组织 244
19.4.3 文件的使用 248
19.5 操作系统的用户界面 248
第二十章 几种操作系统介绍 250
20.1 UNIX操作系统 250
20.1.1 UNIX操作系统的特点 250
20.1.2 UNIX操作系统的结构 251
20.1.3 UNIX操作系统的进程管理与存储管理 253
20.1.4 UNIX操作系统的文件系统和设备管理 254
20.2.1 CP/M操作系统的结构 258
20.2 CP/M操作系统 258
20.2.2 CP/M操作系统的文件管理 259
20.2.3 CP/M操作系统的发展 260
20.2.4 PC-DOS简介 261
20.3 分布式操作系统 261
20.3.1 分布式计算机系统概述 261
20.3.2 分布式操作系统的特点 262
练习与思考题 264
参考文献 264
21.2 数据管理方法的发展 266
21.1 数据库的概念 266
第二十一章 数据库系统概述 266
第五篇 数据库系统 266
21.2.1 人工管理阶段 267
21.2.2 文件系统阶段 267
21.2.3 数据库系统阶段 267
21.3 数据库技术的应用 268
21.4 数据模型 269
21.4.1 层次模型 269
21.4.2 网状模型 270
21.5.1 数据库系统 271
21.5 数据库系统的构成 271
21.4.3 关系模型 271
21.5.2 数据库管理系统 272
21.6 数据库数据的存取过程 274
第二十二章 关系模型的数据库系统 276
22.1 基本概念 276
22.1.1 笛卡尔积和关系 276
22.1.2 关系数据语言的分类 278
22.2 关系代数 278
22.2.1 传统的集合运算 278
22.2.2 专门的关系运算 279
22.2.3 检索操作 283
22.2.4 存储操作 284
22.3 关系演算 284
22.3.1 元组关系演算 284
22.3.2 域关系演算 288
22.4 介于关系代数与关系演算之间的语言SQL 291
22.5 关系数据语言的特点 293
22.6 关系数据库的模式和子模式 294
22.6.1 模式 294
22.6.2 子(外)模式 295
22.7.1 查询优化问题的提出 296
22.7 查询优化概述 296
22.7.2 优化的一般策略 297
22.8 关系模式的规范化 298
22.8.1 关系的规范化与范式 298
22.8.2 函数依赖和码(关键字) 299
22.8.3 2NF 300
22.8.4 3NF 301
22.8.5 BCNF(Boyce-Codd范式) 301
第二十三章 ORACLE关系数据库系统 303
23.1 概述 303
23.2 用户友好接口UFI 305
23.2.1 SQL和UFI 305
23.2.2 索引和聚集 306
23.2.3 数据控制 307
23.2.4 报表格式输出 309
23.2.5 UFI命令 309
23.3 交互式应用工具IAF 310
23.3.1 IAG使用概述 311
23.3.2 IAP的调用 311
23.4 宿主语言接口HLI 312
第二十四章 网状模型的数据库系统 315
24.1 CODASYL系统的总体结构 315
24.2.1 记录类型 316
24.2 CODASYL系统的数据模型 316
24.2.2 系类型 317
24.2.3 系值 318
24.2.4 CODASYL系统对事物联系的表示方法 319
24.3 记录的存放方法 320
24.3.1 域 321
24.3.2 数据库码 321
24.3.3 运行单位与当前值 321
24.3.4 记录的定位方式 322
24.4 系类型的描述及其实现 323
24.4.1 系序原则 323
24.4.2 属籍类别 324
24.4.4 系值内有关记录值的连接实现 325
24.4.3 系值选择 325
24.5 模式数据描述语言 327
24.6 子模式数据描述语言 328
24.7 数据操纵语言 330
第二十五章 数据库的保护 334
25.1 安全性 334
25.2 数据的完整性 336
25.3 并发控制 337
25.4 数据库的恢复 338
26.1 数据库设计过程 340
第二十六章 数据库设计 340
26.2 数据字典 346
第二十七章 分布式数据库系统概述 347
27.1 定义与分类 347
27.2 分布式数据库系统的几个主要问题 348
27.2.1 数据分布 348
27.2.2 并发操作控制 349
27.2.3 查询处理 350
27.2.4 恢复处理 350
练习与思考题 351
参考文献 351