第1章 C语言与数据结构 1
1.1 数据结构的基础 2
1.2 数据结构的抽象表示 4
1.2.1 抽象化 5
1.2.2 C语言的数据类型 5
1.2.3 数据结构抽象化 11
1.3 数据结构和算法 15
1.4 结构化的程序规划 16
1.4.1 结构化的重要性 16
1.4.3 自顶向下的设计方法 17
1.4.2 模块化 17
1.5 设计风格 18
1.5.1 使用有意义的变量和函数名称 18
1.5.2 程序注释 18
1.5.3 使用局部变量 19
1.5.4 函数间的参数传递 21
1.5.5 函数的模块化 22
1.6 习题 22
第2章 数组与字符串 25
2.1 内存静态分配 26
2.2 一维数组 26
2.3 一维数组的访问 30
2.4 一维数组的遍历 32
2.5 二维数组 36
2.6 数组的表示法 39
2.6.1 以行为主或以列为主的表示方法 39
2.6.2 指针数组的表示法 42
2.7 稀疏矩阵 45
2.8 字符串的存储方式 47
2.9 字符串的基本处理 52
2.9.1 字符串的拷贝 54
2.9.2 字符串的连接 55
2.9.3 字符串的替换 56
2.9.4 字符串的插入 58
2.9.5 字符串的删除 60
2.9.6 字符串的比较 62
2.9.7 提取子字符串 63
2.10 字符串的高级处理 65
2.10.1 字符串的对比 65
2.10.2 字符串的分割 68
2.11 习题 72
第3章 基本链表 75
3.1 内存动态分配 76
3.1.1 函数malloc() 76
3.1.2 函数free() 80
3.2.1 动态数据结构的声明 81
3.2 链表的创建 81
3.2.2 内存的分配 82
3.2.3 基本链表的创建 84
3.3 链表的遍历 88
3.4 链表的链接 91
3.5 链表内结点的删除 94
3.6 释放链表的内存空间 98
3.7 链表内结点的插入 102
3.8 链表结构的反转 106
3.9 使用头结点的链表 109
3.10 习题 112
第4章 复杂链表 115
4.1 循环链表结构 116
4.1.1 循环链表的创建 116
4.1.2 循环链表内结点的插入 119
4.1.3 循环链表内结点的删除 122
4.1.4 再论循环链表的插入和删除操作 126
4.1.5 内存管理 129
4.2 含头结点的循环链表结构 135
4.2.1 处理多项式 135
4.2.2 再论稀疏数组表示法 140
4.3 双向链表结构 145
4.3.1 双向链表的创建 145
4.3.2 双向链表内结点的插入 149
4.3.3 双向链表内结点的删除 152
4.4 循环双向链表结构 157
4.5 含头结点的循环双向链表结构 161
4.6 习题 161
第5章 栈与队列 163
5.1 使用数组结构创建栈 164
5.2 使用链表创建栈 170
5.3 表达式表示法的种类 177
5.4 中序表达式的计算 179
5.5 前序表达式的计算 185
5.6 后序表达式的计算 190
5.7 中序表达式转成后序表达式 193
5.8 使用栈做回溯控制 198
5.9 队列的应用 203
5.10 使用数组结构创建队列 204
5.11 循环队列 209
5.12 使用链表创建队列 212
5.13 双队列 218
5.13.1 输入限制性双队列 218
5.13.2 输出限制性双队列 221
5.14 习题 224
第6章 递归函数 227
6.1 递归的基础 228
6.2.1 一般函数的调用 230
6.2 递归函数的内部处理过程 230
6.2.2 递归函数的调用 231
6.2.3 递归函数的实际处理过程 233
6.3 递归的链表创建和输出 235
6.4 汉诺塔问题 241
6.5 走迷宫问题 245
6.6 N皇后问题 248
6.7 习题 252
第7章 二叉树 255
7.1 树的基本概念 256
7.2 二叉树的基本概念 257
7.3.1 二叉树数表示法 258
7.3 二叉树的表示法 258
7.3.2 二叉树结构数组表示法 261
7.3.3 二叉树链表结构表示法 264
7.4 二叉树的遍历 267
7.4.1 中序遍历方式 268
7.4.2 前序遍历方式 271
7.4.3 后序遍历方式 274
7.5 二叉树的递归创建法 277
7.6 二叉树的查找方法 279
7.7 二叉树内结点的删除 282
7.8 二叉树的复制 289
7.9 线索二叉树 291
7.10 树的二叉树表示法 297
7.11 树的应用:处理表达式 298
7.12 习题 302
第8章 图 305
8.1 图的基础 306
8.2 图的表示法 307
8.2.1 邻接矩阵表示法 307
8.2.2 邻接表示法 309
8.2.3 邻接多重表表示法 312
8.3.1 深度优先搜索法 318
8.3 图的遍历 318
8.3.2 广度优先搜索法 321
8.4 图的路径表示法 325
8.5 最短路径的求法 326
8.5.1 一个顶点到多顶点 326
8.5.2 各顶点到其他顶点的求法 330
8.6 图的拓扑排序 333
8.7 生成树 339
8.8 最小成生树 340
8.9 习题 346
第9章 查找方法 347
9.1 程序计数的原理 348
9.2 函数O()——Big Oh 349
9.3 查找的基础 352
9.4 顺序查找法 352
9.5 折半查找法 357
9.6 斐波纳契查找法 362
9.7 插补查找法 366
9.8 二叉查找树查找法 369
9.9 散列查找法 372
9.9.1 散列函数 373
9.9.2 线性探测法 375
9.9.3 拉链法 380
9.10 习题 384
第10章 内部排序法 385
10.1 排序的基础 386
10.2 冒泡排序法 386
10.3 选择排序法 392
10.4 插入排序法 394
10.5 希尔排序法 396
10.6 快速排序法 401
10.7 二叉查找树排序法 405
10.8 堆排序法 407
10.9 习题 412
第11章 外部排序法 415
11.2 归并排序法 416
11.1 外部排序法 416
11.3 直接归并排序法 420
11.4 文件的快速排序法 425
11.5 习题 428
第12章 OOP与数据结构 429
12.1 OOP面向对象的基础 430
12.1.1 对象的基本概念 430
12.1.2 面向对象的程序分析 430
12.1.3 面向对象程序语言 431
12.2 C十十的类与对象 431
12.2.1 C十十的标准输出与输入 432
12.2.2 类与对象 433
12.2.3 类的构造函数 436
12.2.4 类的析构函数 439
12.3 字符串类实现 442
12.4 链表类实现 445
12.5 栈类实现 449
12.5.1 数组栈类实现 449
12.5.2 链表栈类实现 452
12.6 二叉树类实现 455
12.7 习题 459
附录A 常用字符与ASCII代码对照表 461
附录B 习题解答 463