标题：新编数据结构及算法教程
基本信息
图书详细信息：
定价：39.5元
印次：1-1
装帧：平装
印刷日期：2012-8-14
图书简介：
本书介绍了数据结构的基本概念、基本知识以及数据结构的应用。全书按照三部分编写。第一部分是线性结构，包括线性表、栈与队列、数组和特殊矩阵；第二部分是非线性结构，包括树和二叉树、图；第三部分是数据处理技术，包括查找和排序，内容涵盖了全国硕士研究生计算机综合考试课程的数据结构知识。
本书适合作为各类高等院校、高等职业技术学校与计算机相关的各类专业的数据结构与算法的教学用书，也是从事软件设计人员一本难得的参考书。
前言
“数据结构”是计算机及相关专业的一门核心专业基础课，在计算机课程的教学计划中，它起着核心主导、承上启下的作用，是培养学生程序设计能力的一门重要课程，也是计算机及相关专业的大学生应聘、考研的一门必需课程。
长期以来，数据结构课程由于其抽象与动态性，使得在教学过程中始终存在“能听懂，编不了程，不会应用”的现象。目前大部分学生在学数据结构之前，只学了一门程序设计语言。受学时的限制，数据结构需要的链表基础，学生知之甚少，几乎没有编写过有关链表的程序，因此造成了学生学习“数据结构”的困难。另外，目前国内外的很多数据结构教科书都是在抽象层次上阐述，它们在介绍典型数据结构之前，虽然也使用了一些实际问题作为切入点，但最后并没有针对这些问题给出具体的解决方案，学生还是没有弄清楚为什么要学习这种结构，怎样用这种结构来解决实际问题。
由于以上问题，我们认为数据结构的教学改革势在必行。为此，我们对传统的教学方法进行改革尝试，以应用为主线，用案例驱动的教学方式，对每一种典型的数据结构教学采用以下方法：
(1) 引入实际问题。
(2) 分析实际问题中的数据和数据之间的关系，以及对数据需要做的常用操作。
(3) 抽象出实际问题涉及数据的逻辑结构、存储结构和基本操作的设计与实现。
(4) 用所学的数据结构设计和实现解决这些实际问题的算法。
(5) 编码、调试并分析运行结果。
上述案例驱动的教学模式，我们已经实践了4年，取得了可喜的成绩。我们边教学边总结，编写了这本以案例驱动为主导，以解决实际问题为主线，以激发学生学习热情为目标的教材，目的是使得原本难教难学的课程变得生动形象，更贴近实际，从而切实提高学生的程序设计能力。
此外，本教材还具有以下特点：
(1) 加强对基本操作实现的函数形参的分析。每个基本操作都配以示意图，显示存放在内存中的数据对象在操作完成前后的变化，分析操作的对象，需要的输入和输出，以及操作是否引起数据对象的变化，帮助读者熟练掌握基本操作的设计与实现。新编数据结构及算法教程前言 (2) 数据结构中的很多算法涉及递归操作，初学者很难理解递归算法的执行过程，为此我们对较难理解的递归算法，配以图表，揭示每一步的变化，将抽象的想象变为可以看到的具体过程，提升读者对递归算法的设计能力。
(3) 对复杂的算法，我们用实际数据，采用图表结合的方式，将存储结构的变化和逻辑结构的变化同步展现，加强读者对算法的理解，使读者进一步掌握复杂算法的设计与实现。
(4) 各章内容均与授课对象进行过多次交流，广泛听取学生的意见，及时进行内容的更新和修改。
全书共8章，由林碧英老师统一编排、审核。第1章、第7章和第8章由石敏老师编写；第2章和第3章由焦润海老师编写；第4章、第5章和第6章由林碧英老师编写。各章的习题由苏辰隽、莫瑞芳整理。
我们只是在案例教学做了一些尝试，在教材的编写中可能还有很多不尽人意的地方，恳请广大读者多提宝贵意见。
编写组
2012年8月于北京
目录
第1章 绪论 /?1
1.1 数据结构的起源与发展1
1.2 基本概念和术语2
1.3 理解数据结构3
1.4 数据的逻辑结构和存储结构4
1.4.1 逻辑结构5
1.4.2 存储结构6
1.5 抽象数据类型8
1.5.1 数据类型8
1.5.2 抽象数据类型8
1.6 算法分析与评价11
1.6.1 数据结构与算法的关系11
1.6.2 算法的定义11
1.6.3 算法的5大特性11
1.6.4 算法设计的要求12
1.6.5 算法效率分析13
1.6.6 算法的时间复杂度14
1.6.7 算法存储空间需求16
1.7 本章小结17
1.8 习题17
第2章 线性表 /?20
2.1 问题的提出20
2.1.1 问题中的数据分析20
2.1.2 问题中的功能分析21
2.1.3 问题中的数据结构22
2.2 线性表22
2.2.1 线性表的定义22
2.2.2 线性表的存储结构和基本操作的实现24
2.2.3 线性表的两种存储结构的区别47新编数据结构及算法教程目录 2.3 案例实现48
2.3.1 基于顺序表的新生成绩管理系统48
2.3.2 基于单向链表的新生成绩管理系统52
2.4 其他形式的链表54
2.4.1 单向循环链表54
2.4.2 双向循环链表57
2.5 线性表的应用60
2.5.1 两个线性表的合并60
2.5.2 一元多项式的应用63
2.6 本章小结69
2.7 习题与实验70
第3章 栈与队列 /?74
3.1 问题的提出74
3.1.1 问题中的数据分析74
3.1.2 问题中的功能分析74
3.1.3 问题中的数据结构75
3.2 栈76
3.2.1 栈的定义76
3.2.2 栈的存储结构和基本操作的实现77
3.2.3 栈的两种存储结构的区别87
3.2.4 案例实现: 基于栈的括号匹配87
3.3 栈的应用89
3.3.1 表达式求值89
3.3.2 栈与递归94
3.4 队列103
3.4.1 队列的定义103
3.4.2 队列的存储结构和基本操作的实现105
3.4.3 队列的两种存储结构的区别116
3.4.4 案例实现: 基于队列的医院挂号模拟系统116
3.5 队列的应用120
3.6 共用栈和双队列124
3.6.1 共用栈124
3.6.2 双端队列126
3.7 本章小结127
3.8 习题与实验127
第4章 数组和特殊矩阵 /?133
4.1 多维数组133
4.1.1 数组的逻辑结构133
4.1.2 数组的内存映像133
4.2 特殊矩阵的压缩存储136
4.2.1 对称矩阵136
4.2.2 三角矩阵138
4.2.3 带状矩阵139
4.3 稀疏矩阵140
4.3.1 稀疏矩阵的三元组表存储140
4.3.2 稀疏矩阵的十字链表存储146
4.4 本章小结152
4.5 习题152
第5章 树和二叉树 /?155
5.1 问题的提出155
5.1.1 问题中的数据分析155
5.1.2 问题中的功能分析156
5.1.3 问题中的数据结构156
5.2 树的定义和基本术语156
5.2.1 树的递归定义156
5.2.2 树的基本术语156
5.2.3 树的表示158
5.2.4 树的抽象数据类型描述159
5.3 二叉树159
5.3.1 二叉树的定义159
5.3.2 二叉树的性质161
5.3.3 二叉树的抽象数据类型162
5.3.4 二叉树的存储结构163
5.3.5 二叉树的遍历及其应用166
5.3.6 案例实现： 基于表达式二叉树的动态表达式计算192
5.4 线索二叉树192
5.4.1 线索二叉树的定义193
5.4.2 线索二叉树的基本操作实现194
5.4.3 基于中序线索二叉树的遍历算法200
5.5 树、森林与二叉树的转换及其应用203
5.5.1 树、森林与二叉树的转换203
5.5.2 树的存储结构204
5.5.3 树和森林的遍历209
5.5.4 树的简单应用210
5.5.5 案例实现： 基于树结构的行政机构管理217
5.6 哈夫曼树及其应用220
5.6.1 最优二叉树--哈夫曼树220
5.6.2 哈夫曼树及哈夫曼编码的构建算法224
5.7 本章小结229
5.8 习题与实验229
第6章 图 /?234
6.1 问题的提出234
6.1.1 问题中的数据分析235
6.1.2 问题中的功能分析235
6.1.3 问题中的数据结构235
6.2 图的定义和基本术语235
6.2.1 图的定义235
6.2.2 图的基本术语235
6.2.3 图的分类与连通性237
6.2.4 图的抽象数据类型定义238
6.3 图的存储结构239
6.3.1 图的邻接矩阵表示240
6.3.2 图的邻接表表示243
6.3.3 有向图的十字链表表示246
6.3.4 无向图的邻接多重表表示247
6.4 图的遍历249
6.4.1 连通图的深度优先搜索(Depth-First Search)249
6.4.2 连通图的广度优先搜索(Breadth-First Search)253
6.4.3 非连通图的深度(广度）优先遍历255
6.4.4 图的遍历算法应用255
6.5 图的连通性261
6.5.1 无向图的连通分量和生成树261
6.5.2 最小生成树及应用261
6.6 最短路径272
6.6.1 求从某个源点到其余各点的最短路径272
6.6.2 每一对顶点之间的最短路径278
6.7 有向无环图及其应用283
6.7.1 拓扑排序284
6.7.2 关键路径287
6.7.3 案例实现： 教学计划编排系统290
6.7.4 案例实现： 基于有向无环图的表达式计算295
6.8 本章小结300
6.9 习题与实验301
第7章 查找 /?305
7.1 问题的提出305
7.2 基本概念与描述306
7.2.1 查找的基本概念306
7.2.2 性能分析307
7.2.3 内部查找和外部查找308
7.2.4 C语言描述308
7.3 线性表查找308
7.3.1 顺序查找309
7.3.2 二分查找310
7.3.3 分块查找314
7.3.4 案例实现： 基于顺序查找的学生信息表查询316
7.4 树表查找320
7.4.1 二叉排序树320
7.4.2 平衡二叉树328
7.4.3 B-树和B+树344
7.4.4 案例实现： 基于二叉排序树的学生信息管理352
7.5 哈希表357
7.5.1 哈希表概念357
7.5.2 常用的哈希函数358
7.5.3 解决冲突的方法359
7.5.4 哈希表的查找及其性能分析362
7.6 本章小结364
7.7 习题与实验365
第8章 排序 /?369
8.1 问题的提出369
8.2 基本概念369
8.3 插入排序371
8.3.1 直接插入排序371
8.3.2 折半插入排序373
8.3.3 希尔排序374
8.4 交换排序375
8.4.1 冒泡排序375
8.4.2 快速排序377
8.5 选择排序379
8.5.1 简单选择排序380
8.5.2 堆排序381
8.6 归并排序384
8.7 基数排序386
8.7.1 多关键字排序386
8.7.2 链式基数排序387
8.8 案例实现： 学生基本信息表的排序390
8.9 各种内部排序方法的比较397
8.10 本章小结398
8.11 习题399
参考文献 /?402[1]