本书定位准确,合理规划教学内容,其内容选取符合教学大纲要求,并兼顾学科的广度和深度,适用面广。 全书围绕核心概念,提炼基础性内容,侧重工程实践,注重算法设计与程序实现。本书对知识单元的结构安排合理,主线清晰,全面、系统地介绍了线性表、队列、堆栈、树、图等基本数据结构,以及这些数据结构在计算机中的存储及算法实现,并介绍了各种查找及排序算法的实现和效率分析。书中各种算法采用C语言描述。除介绍相关知识点外,书中每一章还给出了教学的建议课时、总体要求、学习重点、习题与解析和上机实训题目及解析,这非常有助于教师的教学安排以及学生对重点的掌握,从而提高学生的应用能力。同时,每一章还包括一个综合性的项目案例,并给出了项目的设计思想和设计过程,从而提高读者对实际问题的分析和解决能力。 本书相关的配套资源包括各章的程序源代码、PPT电子教案、习题答案与解析、上机实训和项目案例源代码,都可以在人民邮电出版社教学服务与资源网上(www.ptpedu.com.cn)下载。 本书可以作为高等学校计算机类专业的教材和参考书,也可作为其他理工类专业的数据结构课程的教学用书,还可以作为计算机相关人员的自学参考书。
1.注意基本概念的引入和阐述,通过实例引入基本概念,然后对主要数据结构及其相关算法分析进行深入比较。2.继承《数据结构》(严蔚敏,清华大学出版社)的优点,同时又进行大范围地内容更新。3.本书每一章都设计比较新颖的综合上机实习题(即项目实习)。
目 录
第1章 绪论 1
1.1 数据结构的作用和意义 1
1.1.1 数据结构的作用 2
1.1.2 数据结构的意义 2
1.2 基本概念和术语 5
1.2.1 基本概念和术语 5
1.2.2 数据结构的逻辑结构与物理结构 6
1.3 数据结构的表示 8
1.4 算法和算法分析 9
1.4.1 算法的基本概念 9
1.4.2 算法效率的度量 10
1.4.3 算法效率分析 11
1.5 习题与解析 14 目 录
第1章 绪论 1
1.1 数据结构的作用和意义 1
1.1.1 数据结构的作用 2
1.1.2 数据结构的意义 2
1.2 基本概念和术语 5
1.2.1 基本概念和术语 5
1.2.2 数据结构的逻辑结构与物理结构 6
1.3 数据结构的表示 8
1.4 算法和算法分析 9
1.4.1 算法的基本概念 9
1.4.2 算法效率的度量 10
1.4.3 算法效率分析 11
1.5 习题与解析 14
第2章 线性表 16
2.1 线性表的逻辑结构 17
2.1.1 线性表的概念 17
2.1.2 线性表的基本操作 18
2.1.3 线性表的抽象数据类型描述 18
2.2 线性表的顺序表示和实现 19
2.2.1 线性表的顺序表示 19
2.2.2 顺序表的实现 20
2.2.3 顺序表的应用 24
2.3 线性表的链式表示和实现 26
2.3.1 线性表的链式表示 26
2.3.2 单链表的实现 27
2.3.3 循环链表 31
2.3.4 双向链表 31
2.3.5 链表的应用 33
2.4 项目实例 34
2.4.1 项目说明 34
2.4.2 系统结构设计 36
2.4.3 系统功能设计 37
2.4.4 系统功能实现 38
2.5 小结 43
2.5.1 线性表小结 43
2.5.2 顺序表和链表的比较 43
2.6 习题与解析 43
2.7 实训 47
第3章 栈和队列 50
3.1 栈 50
3.1.1 栈的定义及基本运算 50
3.1.2 顺序栈 52
3.1.3 链栈 57
3.2 队列 60
3.2.1 队列的定义及基本运算 60
3.2.2 循环队列 61
3.2.3 链队列 65
3.3 栈和队列的应用举例 67
3.3.1 栈的应用之一:数制转换 67
3.3.2 栈的应用之二:括号匹配 68
3.3.3 栈的应用之三:表达式求值 69
3.3.4 队列的应用之一:模拟服务前台的排队现象问题 73
3.3.5 队列的应用之二:模拟打印机缓冲区 74
3.4 项目实例 75
3.4.1 项目说明 75
3.4.2 问题分析 75
3.4.3 系统设计 76
3.4.4 系统实现 76
3.5 习题与解析 82
3.6 实训 84
第4章 串、数组和广义表 87
4.1 串的定义及其运算 88
4.1.1 串的基本概念 88
4.1.2 串的运算 88
4.2 串的存储结构 90
4.2.1 顺序存储结构 90
4.2.2 链式存储结构 90
4.3 串运算的实现 91
4.3.1 常用的C语言串函数 91
4.3.2 模式匹配 93
4.4 数组 94
4.4.1 数组的定义 94
4.4.2 数组的结构特性 95
4.5 数组的顺序表示和实现 95
4.6 矩阵的压缩存储 96
4.6.1 特殊矩阵 97
4.6.2 稀疏矩阵 98
4.7 广义表 99
4.7.1 广义表的逻辑结构 99
4.7.2 广义表的存储结构及实现 100
4.8 项目实例 101
4.8.1 项目说明 101
4.8.2 系统结构设计 102
4.8.3 系统功能实现 102
4.9 习题 107
4.10 实训 108
第5章 树和二叉树 112
5.1 树的定义和基本术语 113
5.1.1 树的定义 113
5.1.2 树的表示方法 113
5.1.3 树的术语 114
5.2 二叉树 115
5.2.1 二叉树基本概念 115
5.2.2 二叉树的性质 117
5.2.3 二叉树的存储结构 118
5.3 二叉树遍历 121
5.3.1 二叉树遍历 121
5.3.2 二叉树的建立和销毁 126
5.3.3 线索二叉树 128
5.3.4 线索二叉树的基本操作实现 129
5.4 树和森林 132
5.4.1 树的存储结构 132
5.4.2 树和森林与二叉树之间的转换 134
5.4.3 树和森林遍历 136
5.5 Huffman树及其应用 136
5.5.1 最优二叉树(哈夫曼树) 136
5.5.2 哈夫曼树的构造算法 138
5.5.3 哈夫曼树在编码问题中的应用 139
5.6 习题与解析 140
5.7 项目实例 145
5.7.1 项目说明 145
5.7.2 概要设计 146
5.7.3 系统功能实现 147
5.8 实训 151
第6章 图 154
6.1 概述 155
6.1.1 图的定义 155
6.1.2 图的常用术语及含义 155
6.2 图的存储结构 157
6.2.1 邻接矩阵 157
6.2.2 邻接表 161
6.3 图的遍历 165
6.3.1 深度优先搜索 166
6.3.2 广度优先搜索 168
6.4 生成树和最小生成树 170
6.4.1 生成树 170
6.4.2 最小生成树 171
6.5 图的应用 176
6.5.1 最短路径 176
6.5.2 拓扑排序 180
6.5.3 关键路径 182
6.6 项目实例 184
6.6.1 项目说明 184
6.6.2 概要设计 184
6.6.3 详细设计 186
6.6.4 编码及实现 187
6.6.5 测试分析 196
6.7 习题与解析 199
6.8 实训 203
第7章 查找 204
7.1 基本概念 204
7.2 静态查找表 206
7.2.1 顺序查找 206
7.2.2 折半查找 207
7.3 动态查找表 211
7.3.1 二叉排序树 211
7.3.2 平衡二叉树 215
7.3.3 B-树 217
7.4 哈希表 220
7.4.1 哈希表的概念 220
7.4.2 哈希函数的构建 221
7.4.3 处理冲突 223
7.4.4 哈希表的查找及其分析 225
7.5 项目实例 226
7.5.1 项目说明 226
7.5.2 系统功能设计 226
7.5.3 系统功能实现 227
7.6 习题与解析 232
7.7 实训 234
第8章 排序 235
8.1 基本概念 235
8.2 插入排序 236
8.2.1 直接插入排序 237
8.2.2 希尔排序 239
8.3 交换排序 240
8.3.1 冒泡排序 240
8.3.2 快速排序 242
8.4 选择排序 244
8.4.1 简单选择排序 244
8.4.2 堆排序 246
8.5 归并排序(二路归并排序) 249
8.6 各种排序方法的比较 250
8.7 项目实例 251