计算机类专业教育 > 数据结构与算法类

数据结构(第三版)

书号:9787113110253 套系名称:21世纪高等院校计算机专业规划教材

作者:刘振鹏 罗文劼 石强 出版日期:2010-06-10

定价:28.00 页码 / 开本:257 /16

策划编辑:秦绪好 孟欣 责任编辑:孟欣

适用专业:无 适用层次:本科

最新印刷时间:

资源下载
教学课件 教学素材(暂无)
习题答案(暂无) 教学案例(暂无)
教学设计(暂无) 教学视频(暂无)
内容简介 前言 目录 作者介绍 图书特色
  • 本书为普通高等教育“十一五”国家级规划教材。本书根据教育部高等学校计算机科学与技术教学指导委员会关于“数据结构”课程的教学基本要求进行编写,介绍了各种最常用的数据结构,包括线性表、栈、队列、矩阵的压缩存储、树与二叉树、图、查找、排序等。本书阐明各种数据结构内在的逻辑关系,讨论它们在计算机中的存储表示,以及在这些数据结构下的运算和实现的算法,并对算法的效率进行了简要的分析。本书既注重原理又重视算法的实现,每个算法均给出Visual C++语言的描述,并加以详细的注释,每章都附有大量的习题。

            本书内容丰富、结构清晰、深入浅出、突出算法,注重实践和应用,强调理论与实践的结合,便于教学。本书适合作为高等院校计算机科学与应用、通信工程、电子工程等电子信息类专业的教材,也可供相关证书考试、考研或从事计算机应用与工程技术的工作者及计算机爱好者自学或参考使用。

  • “数据结构”是计算机科学与技术等电气信息类相关专业的一门重要的基础课程,也是一门必修的核心课程。在计算机科学的各个领域都要用到不同的数据结构,例如在操作系统中要用到队列;编译系统中要用到栈、散列表、语法树;人工智能中要用到有向图。另外,面向对象程序设计、计算机图形学、软件工程、多媒体技术等领域,都会用到很多数据结构。
    “数据结构”课程涉及各种离散结构在计算机上如何存储和处理,其内容丰富、涉及面广,而且还在随各种基于计算机的应用技术的发展而不断增加新的内容。通过学习,学生可以较全面理解算法和数据结构的概念,掌握各种数据结构和算法的实现方式,比较不同数据结构和算法的特点。“数据结构”是一门理论与实际紧密联系的课程,它旨在分析研究计算机加工的数据对象的特性,以便选择适当的数据结构和存储结构,从而使建立在其上的解决问题的算法达到最优,并在此基础上,编写出结构清晰、正确易读、符合软件工程规范的程序,从而为进一步学习后续专业课程和软件的开发打下坚实的基础。
    本书层次分明、结构清晰、理论深度适当,侧重应用。在教材组织方式上,注重从问题求解的角度出发,讨论相关的基础理论、数据和算法抽象、数据结构与算法设计以及在C++程序设计语言中的实现。作为普通高等教育“十一五”国家级规划教材《数据结构(第二版)》的再版,本书保持了前两版的基本框架,概念清晰、论述透彻、面向应用。进一步完善了算法与数据结构的内容体系,强调与考研大纲的一致性;对所有算法进行了详尽的注释,进一步细化了算法的描述,强调C++中面向对象的思想;改写了第二版中不利于读者理解的描述,细化其中由读者自行补充的部分,以利于读者理解算法的基本思想。各章均安排有知识要点和习题。与本书配套的《数据结构习题解答与实验指导(第三版)》详细给出了书中习题的解答思路和参考答案,并且结合数据结构课堂和实践教学,设计了7项实验内容,与本书一起构成了一个完整的教学系列。
    本书的第1章~第3章由石强编写修订,第8章~第10章由罗文劼编写修订,第4章由金作涛编写修订,第5章、第7章由谷海红编写修订,第6章由胡子义编写修订,最后由刘振鹏统一定稿。
    本书在写作和修订过程中,得到了许多专家和众多院校“数据结构”任课教师的大力支持和帮助,提出了许多中肯的意见和很好的建议,对本书的编写修订起到了很大的指导作用。对此,作者表示衷心的感谢。
    感谢作者的多位同事和学生,他们在本书的资料收集、书稿编写、算法验证和代码调试、插图绘制与内容审核等各个环节提出了很多宝贵的意见,做了很多实质性的工作。
    感谢中国铁道出版社的各位编辑和图书推广人员,他们为本书能够以较高的质量完成和在更多院校使用做出了巨大贡献。
  • 第1章  绪论 1
    1.1  数据结构的概念 1
    1.1.1  为什么要学习数据结构 1
    1.1.2  相关概念和术语 4
    1.1.3  数据结构课程的内容 6
    1.2  数据类型和抽象数据类型 7
    1.2.1  数据类型 7
    1.2.2  抽象数据类型 8
    1.3  算法和算法分析 9
    1.3.1  算法特性 9
    1.3.2  算法描述 10
    1.3.3  算法性能分析与度量 10
    小结 12
    习题 12
    第2章  线性表 14
    2.1  线性表的逻辑结构 14
    2.1.1  线性表的定义 14
    2.1.2  线性表的基本操作 14
    2.2  线性表的顺序存储及运算实现 16
    2.2.1  顺序表 16
    2.2.2  顺序表上基本运算的实现 17
    2.2.3  顺序表应用举例 21
    2.3  线性表的链式存储和运算实现 23
    2.3.1  单链表 24
    2.3.2  单链表上基本运算的实现 25
    2.3.3  循环链表 31
    2.3.4  双向链表 32
    2.3.5  静态链表 33
    2.3.6  间接寻址 35
    2.3.7  单链表应用举例 35
    2.4  顺序表和链表的比较 37
    小结 38
    习题 38
    第3章  栈和队列 40
    3.1  栈 40
    3.1.1  栈的定义及基本运算 40
    3.1.2  栈的存储实现和运算实现 41
    3.1.3  栈的应用举例 44
    3.2  队列 54
    3.2.1  队列的定义及基本运算 54
    3.2.2  队列的存储实现及运算实现 54
    3.2.3  队列应用举例 60
    小结 62
    习题 62
    第4章  串 64
    4.1  串及其基本运算 64
    4.1.1  串的基本概念 64
    4.1.2  串的基本运算 64
    4.2  串的定长顺序存储及基本运算 65
    4.2.1  串的定长顺序存储 65
    4.2.2  定长顺序串的基本运算 66
    4.2.3  模式匹配 67
    4.3  串的堆存储结构 73
    4.3.1  串名的存储映像 73
    4.3.2  堆存储结构 74
    4.3.3  基于堆结构的串的基本运算实现 74
    小结 76
    习题 76
    第5章  数组和广义表 77
    5.1  数组 77
    5.1.1  一维数组 77
    5.1.2  多维数组 77
    5.1.3  数组的内存映像 78
    5.2  特殊矩阵的压缩存储 81
    5.2.1  对称矩阵 81
    5.2.2  三角矩阵 82
    5.2.3  带状矩阵 83
    5.3  稀疏矩阵 84
    5.3.1  稀疏矩阵的三元组表存储 84
    5.3.2  稀疏矩阵的十字链表存储 90
    5.4  广义表 94
    5.4.1  广义表的定义和基本运算 94
    5.4.2  广义表的存储 96
    5.4.3  广义表基本操作的实现 98
    小结 101
    习题 102
    第6章  二叉树 104
    6.1  二叉树的定义与性质 104
    6.1.1  二叉树的基本概念 104
    6.1.2  二叉树的主要性质 106
    6.2  二叉树的基本操作与存储实现 107
    6.2.1  二叉树的存储 107
    6.2.2  二叉树的基本操作及实现 110
    6.3  二叉树的遍历 112
    6.3.1  二叉树的遍历方法及递归实现 112
    6.3.2  二叉树遍历的非递归实现 114
    6.3.3  由遍历序列恢复二叉树 117
    6.3.4  不用栈的二叉树遍历的非递归方法 119
    6.4  线索二叉树 120
    6.4.1  线索二叉树的定义及结构 120
    6.4.2  线索二叉树的基本操作实现 122
    6.5  二叉树的应用举例 127
    6.5.1  查找数据元素 127
    6.5.2  统计给定二叉树中叶结点的数目 128
    6.5.3  创建二叉树的二叉链表存储 128
    6.5.4  表达式运算 129
    6.6  哈夫曼树 129
    6.6.1  问题引入 130
    6.6.2  哈夫曼树的基本概念及其构造方法 131
    6.6.3  哈夫曼树的构造算法 132
    6.6.4  哈夫曼编码 134
    小结 137
    习题 137
    第7章  树与森林 140
    7.1  树的概念与表示 140
    7.1.1  树的定义及相关术语 140
    7.1.2  树的表示 142
    7.2  树的基本操作与存储 142
    7.2.1  树的基本操作 143
    7.2.2  树的存储结构 143
    7.3  树、森林与二叉树的转换 146
    7.3.1  树转换为二叉树 146
    7.3.2  森林转换为二叉树 147
    7.3.3  二叉树转换为树和森林 147
    7.4  树和森林的遍历 148
    7.4.1  树的遍历 148
    7.4.2  森林的遍历 149
    7.5  树的应用举例 149
    7.5.1  判定树 149
    7.5.2  集合的表示 151
    7.5.3  等价问题 152
    小结 153
    习题 154
    第8章  图 155
    8.1  图的基本概念 155
    8.1.1  图的定义和术语 155
    8.1.2  图的基本操作 158
    8.2  图的存储结构 158
    8.2.1  邻接矩阵 158
    8.2.2  邻接表 160
    8.2.3  十字链表 162
    8.2.4  邻接多重表 164
    8.3  图的遍历 166
    8.3.1  深度优先搜索 166
    8.3.2  广度优先搜索 168
    8.3.3  应用图的遍历判定图的连通性 169
    8.3.4  生成树和生成森林 170
    8.4  最小生成树 172
    8.4.1  最小生成树的概念 172
    8.4.2  普里姆(Prim)算法 173
    8.4.3  克鲁斯卡尔(Kruskal)算法 176
    8.5  最短路径 178
    8.5.1  迪杰斯特拉(Dijkstra)算法 178
    8.5.2  弗洛伊德(Floyd)算法 182
    8.6  拓扑排序与关键路径 183
    8.6.1  有向无环图的概念 184
    8.6.2  拓扑排序 185
    8.6.3  关键路径 189
    小结 194
    习题 195
    第9章  查找 197
    9.1  基本概念 197
    9.1.1  相关术语 197
    9.1.2  查找表结构 198
    9.2  静态查找表 199
    9.2.1  顺序查找 199
    9.2.2  折半查找 200
    9.2.3  插值查找和斐波那契查找 203
    9.2.4  分块查找 204
    9.3  二叉排序树 205
    9.3.1  二叉排序树的定义 205
    9.3.2  二叉排序树的查找过程 205
    9.3.3  二叉排序树的插入操作 206
    9.3.4  二叉排序树的删除操作 207
    9.4  平衡二叉树 209
    9.4.1  平衡二叉树的定义 209
    9.4.2  平衡二叉树的平衡化旋转 210
    9.4.3  平衡二叉树的插入 212
    9.4.4  平衡二叉树的查找性能分析 215
    9.5  B树和B+树 216
    9.5.1  B树的定义 216
    9.5.2  B树的查找 216
    9.5.3  B树的插入 218
    9.5.4  B树的删除 221
    9.5.5  B+树 222
    9.6  哈希表查找 223
    9.6.1  哈希表与哈希方法 223
    9.6.2  常用的哈希函数 224
    9.6.3  处理冲突的方法 225
    9.6.4  哈希表的查找性能分析 228
    小结 229
    习题 230
    第10章  排序 232
    10.1  排序的基本概念 232
    10.1.1  相关术语 232
    10.1.2  排序的时间开销 233
    10.2  插入排序 233
    10.2.1  直接插入排序 233
    10.2.2  折半插入排序 234
    10.2.3  表插入排序 235
    10.2.4  希尔排序 237
    10.3  交换排序 238
    10.3.1  冒泡排序 238
    10.3.2  快速排序 239
    10.4  选择排序 241
    10.4.1  简单选择排序 242
    10.4.2  树形选择排序 242
    10.4.3  堆排序 243
    10.5  归并排序 245
    10.6  基数排序 247
    10.6.1  多关键码排序 247
    10.6.2  链式基数排序 248
    10.7  外排序 251
    10.7.1  外部排序的方法 251
    10.7.2  多路平衡归并的实现 252
    小结 255
    习题 255
    参考文献 258