内容
本书基于C++语言编写,从趣味故事引入算法复杂性计算及数据结构基础内容,涵盖线性结构、树形结构和图形结构,包括链表、栈和队列、树和图的应用等。本书内容还涉及数据结构的基本应用(包括各种查找、排序等)和高级应用(包括优先队列、并查集、B-树、B+树和红黑树等)。通过大量图解将抽象数据模型简单通俗化,语言表述浅显易懂,并结合有趣的实例帮助读者轻松掌握数据结构。
作者
陈小玉,南阳理工学院副教授,高级程序员,研究方向为智能计算、数据挖掘与机器学习,主要讲授“算法设计与分析”和“人工智能”等课程,多次指导学生获得ACM程序设计大赛亚洲区奖项。
目录
第1章 数据结构入门1
1.1 数据结构基础知识 2
1.3 一棋盘麦子 17
1.5 本章要点 23
2.1 顺序表 25
2.1.2 动态分配 26
2.2 单链表 35
2.2.2 单链表的基本操作 37
2.3.1 双向链表的存储方式 48
2.4 循环链表 54
2.5.1 合并有序顺序表 55
2.5.3 就地逆置单链表 64
2.5.5 删除链表中的重复元素 71
第3章 栈和队列 78
3.2 链栈 83
3.3.1 顺序队列的定义 88
3.3.3 循环队列的基本操作 96
3.5 栈和队列的应用 102
3.5.2 回文判定 104
3.6 栈和队列学习秘籍 116
4.1 字符串 122
4.3 模式匹配KMP算法 128
4.5 字符串的应用——病毒检测 135
第5章 数组与广义表 139
5.2 特殊矩阵的压缩存储 143
5.2.2 三角矩阵 145
5.2.4 稀疏矩阵 150
5.4 好玩贪吃蛇——数字矩阵 151
第6章 树 158
6.1.1 树的定义 159
6.1.3 树、森林与二叉树的转换 165
6.2.1 二叉树的性质 168
6.2.3 二叉树的创建 175
6.3.1 先序遍历 183
6.3.3 后序遍历 188
6.4 线索二叉树 196
6.4.2 构造线索二叉树 197
6.5 树和森林的遍历 204
6.5.2 森林的遍历 209
6.6.1 二叉树的深度 212
6.6.3 三元组创建二叉树 214
6.6.5 哈夫曼树 223
第7章 图 241
7.2 图的存储结构 249
7.2.2 邻接表 256
7.2.4 邻接多重表 268
7.3.1 广度优先搜索 270
7.4 图的应用 279
7.4.2 各顶点之间最短路径——Floyd 287
7.4.4 最小生成树——kruskal 305
7.4.6 关键路径 316
第8章 查找 327
8.1.1 顺序查找 328
8.2 树表查找 335
8.2.2 平衡二叉查找树 346
8.3.1 散列函数 361
8.3.3 散列查找及性能分析 376
第9章 排序 379
9.1.1 直接插入排序 381
9.2 交换排序 389
9.2.2 快速排序 392
9.3.1 简单选择排序 401
9.4 合并排序 412
9.5.1 桶排序 417
9.6 排序学习秘籍 421
10.1 并查集 426
10.2.1 出队 431
10.2.3 构建初始堆 435
10.3.1 树高与性能 439
10.3.3 插入 441
10.4 B+树 449
10.4.2 插入 451
10.5 红黑树 457
10.5.2 树高与性能 458
10.5.4 查找 460
10.5.6 删除 466