第一章 概论 1
1.1 计算机软件及其发展 1
1.1.1 程序设计语言的发展 1
1.1.2 操作系统的形成和发展 3
1.1.3 程序的一般结构 3
1.2 算法和数据结构概述 5
1.2.1 问题的求解过程 5
1.2.2 数据结构和算法的概念 5
1.2.3 算法评价方法 8
习题一 9
第二章 C语言基础 11
2.1 C语言概述 11
2.1.1 C语言发展简史 11
2.1.2 C语言的特点 11
2.1.3 C程序的基本结构 12
2.1.4 保留字和标识符 13
2.1.5 常量和变量 14
2.2 基本数据类型 15
2.2.1 整型数据 15
2.2.2 实型数据 15
2.2.3 字符型数据 16
2.2.4 长整型、短整型和无符号整型 17
2.3 运算符和表达式 17
2.3.1 基本算术运算符及其运算规则 18
2.3.2 赋值运算符和赋值表达式 20
2.3.3 逗号运算符和逗号表达式 21
2.4 Turbo C2.0环境下C程序的上机操作方法 21
2.4.1 C程序运行经历的过程 21
2.4.2 程序的上机操作步骤 22
习题二 24
第三章 基本C程序设计 26
3.1 赋值语句和基本输入输出 26
3.1.1 赋值语句 26
3.1.2 getchar()函数和putchar()函数 26
3.1.3 格式输出函数printf() 27
3.1.4 格式输入函数scanf() 29
3.2 分支程序设计 31
3.2.1 关系运算符和关系表达式 31
3.2.2 逻辑运算符和逻辑表达式 32
3.2.3 if语句 33
3.2.4 switch语句 35
3.2.5 应用举例 37
3.3 循环程序设计 38
3.3.1 while语句 38
3.3.2 do-while语句 39
3.3.3 for语句 40
3.3.4 多重循环 41
3.3.5 break语句和continue语句 42
3.3.6 goto语句和空语句 43
习题三 44
第四章 数组和指针类型 47
4.1 一维数组 47
4.1.1 定义方式和引用方式 47
4.1.2 应用举例 49
4.2 二维数组 50
4.2.1 定义方式和引用方式 50
4.2.2 应用举例 52
4.3 字符数组 53
4.3.1 定义方式和引用方式 53
4.3.2 字符串及其结束标志 54
4.3.3 字符串的输入和输出 55
4.3.4 常用字符串处理函数 56
4.3.5 应用举例 58
4.4 指针 59
4.4.1 指针的基本概念 59
4.4.2 指针变量的定义和引用 60
4.4.3 指向数组的指针 62
4.4.4 指向字符串的指针 64
4.4.5 指针数组 65
习题四 67
第五章 函数和编译预处理 69
5.1 函数的定义和调用 70
5.1.1 函数定义的一般形式 70
5.1.2 函数调用方式 71
5.1.3 函数的返回值 73
5.2 函数的嵌套调用与递归调用 75
5.2.1 函数的嵌套调用 75
5.2.2 函数的递归调用 76
5.3 数组和指针变量作函数参数 78
5.3.1 数组作为函数参数 78
5.3.2 指针变量作为函数参数 79
5.4 变量的存储类型及其作用域 81
5.4.1 局部变量及其存储类型 82
5.4.2 全局变量及其存储类型 85
5.4.3 内部函数和外部函数 89
5.5 编译预处理 91
5.5.1 宏定义 91
5.5.2 文件包含处理 95
习题五 96
第六章 文件 99
6.1 C文件概述 99
6.2 文件类型指针 100
6.3 文件的打开与关闭 100
6.3.1 文件的打开(fopen函数) 100
6.3.2 文件的关闭(fclose函数) 102
6.4 文件的读写和定位 102
6.4.1 文件的读函数 102
6.4.2 文件的写函数 104
6.4.3 文件的定位函数 106
习题六 107
第七章 表结构的算法设计 109
7.1 顺序存储的表结构 109
7.1.1 表结构及存储方法 109
7.1.2 表结构的插入和删除 110
7.1.3 表结构的查找 112
7.2 栈和队结构 115
7.2.1 栈和队的运算 115
7.2.2 栈的应用 120
7.3 结构类型和链表 125
7.3.1 结构类型 125
7.3.2 链表的定义和种类 126
7.3.3 链表的结点和简单链操作 128
7.3.4 链表的构造和输出 131
7.4 链表的运算 133
7.4.1 链表的查找 133
7.4.2 链表的插入 134
7.4.3 链表的删除 135
7.4.4 双向链表 135
7.5 静态链表 138
7.5.1 静态链表的定义 138
7.5.2 静态链表的插入和删除 139
7.6 散列表 141
7.6.1 散列函数 141
7.6.2 散列表的构造 143
习题七 147
第八章 树结构和图结构的算法设计 150
8.1 树的概念 150
8.1.1 树的有关术语 150
8.1.2 二叉树 152
8.1.3 树、森林和二叉树的相互转换 155
8.2 二叉树的遍历 158
8.2.1 二叉树的遍历运算 158
8.2.2 二叉树遍历序列的性质 162
8.2.3 二叉树遍历的应用 165
8.3 二叉树的构造 167
8.4 检索树 168
8.4.1 检索树的概念和查找算法 168
8.4.2 检索树的插入和构造 170
8.4.3 检索树的删除 171
8.5 平衡树 174
8.5.1 平衡树的插入 175
8.5.2 平衡树的删除 178
8.6 哈夫曼树 179
8.6.1 哈夫曼算法 179
8.6.2 哈夫曼树的应用 182
8.7 图的概念和存储方法 183
8.7.1 图的有关术语 183
8.7.2 图的存储方法 186
8.8 先深搜索和先广搜索 190
8.8.1 先深搜索和先深生成林 190
8.8.2 先广搜索 192
8.9 最小生成树 193
8.9.1 Kruscal算法 194
8.9.2 Prim算法 195
8.10 最短路径问题 197
习题八 199
第九章 算法设计常用方法 202
9.1 递归和分治 202
9.1.1 递归 202
9.1.2 分治法 204
9.1.3 平衡原则 208
9.2 贪心法 211
9.3 动态规划 212
9.4 回朔法 216
9.5 面向对象的程序设计方法 218
9.5.1 面向对象的基本概念 218
9.5.2 C++中面向对象的用法简介 219
习题九 223
第十章 软件工程概述 224
10.1 软件工程的概念 224
10.1.1 软件工程的产生 224
10.1.2 软件工程的体系 225
10.2 软件工程开发模式 228
10.2.1 瀑布模型 228
10.2.2 原型开发模型 230
10.2.3 螺旋模型 234
10.2.4 喷泉模型 235
10.2.5 混合模型 236
10.2.6 Petri网模型 237
10.3 软件开发过程 237
10.3.1 开发过程的度量 237
10.3.2 软件开发过程的阶段 238
10.4 计算机辅助软件工程CASE 240
10.5 统一建模语言UML 241
10.5.1 UML的组成 241
10.5.2 UML的使用 244
习题十 245
参考文献 246