第一章 操作系统及UNIX Shell 1
1.1 什么是操作系统 1
1.2 操作系统的分类 2
1.2.1 实时操作系统 2
1.2.2 作业处理操作系统 4
1.2.3 批处理操作系统 6
1.2.4 分时操作系统 6
1.2.5 其他类型的操作系统 7
1.2.6 工业界的主流操作系统 7
1.3 UNIX操作系统的发展史 9
1.3.1 UNIX系统的发展历史和特点 9
1.3.2 Linux系统的发展历史和特点 10
1.4 UNIX操作系统的功能模块 11
1.4.1 处理机和进程管理模块 11
1.4.2 存储管理模块 15
1.4.3 设备管理模块 17
1.4.4 文件系统 19
1.4.5 用户界面 23
1.5 Shell概述 26
1.5.1 shell的种类 26
1.5.2 shell程序的识别 27
1.5.3 shell环境 28
1.5.4 UNIX的用户管理 29
1.5.5 UNIX命令和工具表达形式的约定 31
1.6 B shell 32
1.6.1 shell命令的主要特征 32
1.6.2 shell程序 41
1.7 C shell 48
1.7.1 C shell变量 48
1.7.2 C shell特征 51
1.7.3 控制结构 51
1.7.4 文件名补齐 53
1.7.5 假名 54
1.7.6 命令史 55
1.7.7 工作目录栈 58
1.8 Bash 60
1.8.1 Bash的增强特征 60
1.8.2 命令行扩展功能 62
1.8.3 函数 63
第二章 UNIX系统的软件开发工具 68
2.1 软件开发工具概述 68
2.2 BNF范式 70
2.2.1 BNF范式的定义 70
2.2.2 BNF范式的特征 71
2.2.3 BNF范式示例 71
2.3 vi 73
2.3.1 启动vi和ex 73
2.3.2 vi的工作状态及其转换 74
2.3.3 编辑对象及定位 76
2.3.4 输入类命令 77
2.3.5 输出类命令 77
2.3.6 退出类命令 77
2.3.7 插入类命令 77
2.3.8 删除类命令 79
2.3.9 搜索命令 80
2.3.10 全局操作命令 80
2.3.11 块操作命令 83
2.3.12 设置命令 85
2.3.13 杂类命令 85
2.3.14 宏命令 86
2.3.15 vi环境的定义 87
2.4 sed 87
2.4.1 sed命令 88
2.4.2 地址表达式和匹配字符串 89
2.4.3 删除命令 89
2.4.4 替代命令 89
2.4.5 输入输出命令 91
2.4.6 块操作命令 91
2.4.7 实例 92
2.5 awk 96
2.5.1 awk概述 96
2.5.2 记录、字符段和特殊变量 97
2.5.3 变量及运算 97
2.5.4 awk程序的匹配模式 98
2.5.5 awk程序的操作 100
2.5.6 数组 101
2.5.7 内部函数 101
2.5.8 控制结构 102
2.5.9 实例 103
2.6 make 107
2.6.1 make的功能 107
2.6.2 描述文件 109
2.6.3 后缀定义和传递规则 111
2.6.4 变量和宏定义 112
2.6.5 make命令行 113
2.6.6 包含文件 114
2.6.7 控制结构 115
2.7 SVN 118
2.7.1 SVN的基本概念 119
2.7.2 SVN的基本工作流程 121
2.7.3 SVN帮助命令 122
2.7.4 创建版本库 122
2.7.5 初始化导入 122
2.7.6 导出工作拷贝 123
2.7.7 目录树修改命令 123
2.7.8 提交命令 125
2.7.9 拷贝-修改-合并机制 126
2.7.10 更新命令 126
2.7.11 检查状态命令 127
2.7.12 查看差异命令 128
2.7.13 放弃命令 129
2.7.14 删除冲突命令 129
2.8 lex和yacc 130
2.8.1 lex和yacc概述 130
2.8.2 lex的源程序结构 134
2.8.3 词法规则 134
2.8.4 词法规则的操作语句 135
2.8.5 lex的定义部分 137
2.8.6 lex的用户程序 139
2.8.7 yacc的源程序结构 140
2.8.8 yacc的说明部分 141
2.8.9 语法规则 142
2.8.10 lex和yacc的界面函数 144
2.8.11 实例 147
第三章 C语言及编程规范 152
3.1 基本问题 152
3.1.1 数据类型 152
3.1.2 常数 154
3.1.3 运算符 154
3.1.4 存储类型 156
3.1.5 流程控制 158
3.2 指针 164
3.2.1 指针概念 164
3.2.2 指针和数组 166
3.2.3 指针和字符串 167
3.2.4 指针和动态内存单元 169
3.2.5 指针数组和多维数组 172
3.2.6 数组指针 174
3.2.7 多级指针 175
3.2.8 指针应用举例 176
3.3 结构 180
3.3.1 结构的定义方式 181
3.3.2 结构成员的引用 183
3.3.3 链表 184
3.3.4 插入链表结点 187
3.3.5 删除链表结点 197
3.4 联合 202
3.5 函数 204
3.5.1 函数的定义和调用 204
3.5.2 函数之间的通信 206
3.5.3 指向函数的指针 209
3.5.4 递归函数 211
3.6 文件操作 212
3.6.1 文件的存取 212
3.6.2 低级输入输出 214
3.6.3 文件的随机存取 216
3.7 C语言和shell的通信 217
3.7.1 命令行参数 217
3.7.2 命令行可选项 218
3.7.3 环境变量 220
3.8 C语言编程规范示例 221
3.8.1 数据类型和运算符 221
3.8.2 命名规则 222
3.8.3 变量、指针和初始化 222
3.8.4 函数 223
3.8.5 合理使用空格 223
3.8.6 排版 224
3.8.7 注释 226
3.8.8 文件 227
第四章 数据结构 228
4.1 基本概念 228
4.1.1 数据结构的定义 228
4.1.2 结点和存储单元 228
4.1.3 数据结构的存储方式 230
4.1.4 数据结构的分类 231
4.1.5 数据结构的基本操作 232
4.2 线性表 233
4.2.1 基本问题 233
4.2.2 查找结点 234
4.2.3 添加结点和删除结点 236
4.2.4 线性表查找算法 238
4.2.5 线性表排序算法 240
4.2.6 线性表基本操作算法的时间复杂度 247
4.3 栈和队列 248
4.3.1 栈 248
4.3.2 顺序栈 249
4.3.3 链接栈 251
4.3.4 队列 255
4.3.5 顺序队列 256
4.3.6 环形队列 258
4.3.7 链接队列 259
4.3.8 双向栈 260
4.4 树 261
4.4.1 树的定义 261
4.4.2 树的括号表示 262
4.4.3 树的基本操作 262
4.4.4 树的存储形式 263
4.4.5 树的遍历 268
4.5 二叉树 274
4.5.1 二叉树的定义 274
4.5.2 二叉树的括号表示 274
4.5.3 二叉树的存储 275
4.5.4 二叉树的遍历 276
4.5.5 二叉树的顺序存储 277
4.5.6 二叉树的层号表示 282
4.5.7 二叉树的生成算法 284
4.5.8 任意次树到二叉树的转换 294
4.5.9 穿线树 296
4.6 图 299
4.6.1 图的定义 299
4.6.2 图的基本概念 300
4.6.3 图的基本操作 301
4.6.4 图的存储形式 301
4.6.5 图的遍历 306
4.6.6 图的应用举例 310
附录A ASCII字符集 314
附录B B Shell,Bash和C Shell比较一览表 317
附录C C语言标准库函数 322
参考资料 328