出版时间:2010-6 出版社:中国铁道出版社 作者:刘振鹏 等 著 页数:257
前言
“数据结构”是计算机科学与技术等电气信息类相关专业的一门重要的基础课程,也是一门必修的核心课程。在计算机科学的各个领域都要用到不同的数据结构,例如在操作系统中要用到队列;编译系统中要用到栈、散列表、语法树;人工智能中要用到有向图。另外,面向对象程序设计、计算机图形学、软件工程、多媒体技术等领域,都会用到很多数据结构。 “数据结构”课程涉及各种离散结构在计算机上如何存储和处理,其内容丰富、涉及面广,而且还在随各种基于计算机的应用技术的发展而不断增加新的内容。通过学习,学生可以较全面理解算法和数据结构的概念,掌握各种数据结构和算法的实现方式,比较不同数据结构和算法的特点。“数据结构”是一门理论与实际紧密联系的课程,它旨在分析研究计算机加工的数据对象的特性,以便选择适当的数据结构和存储结构,从而使建立在其上的解决问题的算法达到最优,并在此基础上,编写出结构清晰、正确易读、符合软件工程规范的程序,从而为进一步学习后续专业课程和软件的开发打下坚实的基础。 本书层次分明、结构清晰、理论深度适当,侧重应用。在教材组织方式上,注重从问题求解的角度出发,讨论相关的基础理论、数据和算法抽象、数据结构与算法设计以及在C++程序设计语言中的实现。作为普通高等教育“十一五”国家级规划教材《数据结构(第二版)》的再版,本书保持了前两版的基本框架,概念清晰、论述透彻、面向应用。进一步完善了算法与数据结构的内容体系,强调与考研大纲的一致性;对所有算法进行了详尽的注释,进一步细化了算法的描述,强调C++中面向对象的思想;改写了第二版中不利于读者理解的描述,细化其中由读者自行补充的部分,以利于读者理解算法的基本思想。各章均安排有知识要点和习题。与本书配套的《数据结构习题解答与实验指导(第三版)》详细给出了书中习题的解答思路和参考答案,并且结合数据结构课堂和实践教学,设计了7项实验内容,与本书一起构成了一个完整的教学系列。 本书的第1章~第3章由石强编写修订,第8章~第10章由罗文劫编写修订,第4章由金作涛编写修订,第5章、第7章由谷海红编写修订,第6章由胡子义编写修订,最后由刘振鹏统一定稿。 本书在写作和修订过程中,得到了许多专家和众多院校“数据结构”任课教师的大力支持和帮助,提出了许多中肯的意见和很好的建议,对本书的编写修订起到了很大的指导作用。对此,作者表示衷心的感谢。 感谢作者的多位同事和学生,他们在本书的资料收集、书稿编写、算法验证和代码调试、插图绘制与内容审核等各个环节提出了很多宝贵的意见,做了很多实质性的工作。 感谢中国铁道出版社的各位编辑和图书推广人员,他们为本书能够以较高的质量完成和在更多院校使用做出了巨大贡献。
内容概要
《数据结构(第3版)》根据教育部高等学校计算机科学与技术教学指导委员会关于“数据结构”课程的教学基本要求进行编写,介绍了各种最常用的数据结构,包括线性表、栈、队列、矩阵的压缩存储、树与二又树、图、查找、排序等。《数据结构(第3版)》阐明各种数据结构内在的逻辑关系,讨论它们在计算机中的存储表示,以及在这些数据结构下的运算和实现的算法,并对算法的效率进行了简要的分析。《数据结构(第3版)》既注重原理又重视算法的实现,每个算法均给出Visual C++语言的描述,并加以详细的注释,每章都附有大量的习题。 《数据结构(第3版)》内容丰富、结构清晰、深入浅出、突出算法,注重实践和应用,强调理论与实践的结合,便于教学。《数据结构(第3版)》适合作为高等院校计算机科学与应用、通信工程、电子工程等电子信息类专业的教材,也可供相关证书考试、考研或从事计算机应用与工程技术的工作者及计算机爱好者自学或参考使用。
书籍目录
第1章绪论1.1 数据结构的概念1.1.1 为什么要学习数据结构1.1.2 相关概念和术语1.1.3 数据结构课程的内容1.2 数据类型和抽象数据类型1.2.1 数据类型1.2.2 抽象数据类型1.3 算法和算法分析1.3.1 算法特性1.3.2 算法描述1.3.3 算法性能分析与度量小结习题第2章 线性表2.1 线性表的逻辑结构2.1.1 线性表的定义2.1.2 线性表的基本操作2.2 线性表的顺序存储及运算实现2.2.1 顺序表2.2.2 顺序表上基本运算的实现2.2.3 顺序表应用举例2.3 线性表的链式存储和运算实现2.3.1 单链表2.3.2 单链表上基本运算的实现2.3.3 循环链表2.3.4 双向链表2.3.5 静态链表2.3.6 间接寻址2.3.7 单链表应用举例2.4 顺序表和链表的比较小结习题第3章 栈和队列3.1 栈3.1.1 栈的定义及基本运算3.1.2 栈的存储实现和运算实现3.1.3 栈的应用举例3.2 队列3.2.1 队列的定义及基本运算3.2.2 队列的存储实现及运算实现3.2.3 队列应用举例小结习题第4章 串4.1 串及其基本运算4.1.1 串的基本概念4.1.2 串的基本运算4.2 串的定长顺序存储及基本运算4.2.1 串的定长顺序存储4.2.2 定长顺序串的基本运算4.2.3 模式匹配4.3 串的堆存储结构4.3.1 串名的存储映像4.3.2 堆存储结构4.3.3 基于堆结构的串的基本运算实现小结习题第5章 数组和广义表5.1 数组5.1.1 一维数组5.1.2 多维数组5.1.3 数组的内存映像5.2 特殊矩阵的压缩存储5.2.1 对称矩阵5.2.2 三角矩阵5.2.3 带状矩阵5.3 稀疏矩阵5.3.1 稀疏矩阵的三元组表存储5.3.2 稀疏矩阵的十字链表存储5.4 广义表5.4.1 广义表的定义和基本运算5.4.2 广义表的存储5.4.3 广义表基本操作的实现小结习题第6章 二叉树6.1 二叉树的定义与性质6.1.1 二叉树的基本概念6.1.2 二叉树的主要性质6.2 二叉树的基本操作与存储实现6.2.1 二叉树的存储6.2.2 二叉树的基本操作及实现6.3 二叉树的遍历6.3.1 二叉树的遍历方法及递归实现6.3.2 二叉树遍历的非递归实现6.3.3 由遍历序列恢复二叉树6.3.4 不用栈的二叉树遍历的非递归方法6.4 线索二叉树6.4.1 线索二叉树的定义及结构6.4.2 线索二叉树的基本操作实现6.5 二叉树的应用举例6.5.1 查找数据元素6.5.2 统计给定二叉树中叶结点的数目6.5.3 创建二叉树的二叉链表存储6.5.4 表达式运算6.6 哈夫曼树6.6.1 问题引入6.6.2 哈夫曼树的基本概念及其构造方法6.6.3 哈夫曼树的构造算法6.6.4 哈夫曼编码小结习题第7章 树与森林7.1 树的概念与表示7.1.1 树的定义及相关术语7.1.2 树的表示7.2 树的基本操作与存储7.2.1 树的基本操作7.2.2 树的存储结构7.3 树、森林与二叉树的转换7.3.1 树转换为二叉树7.3.2 森林转换为二叉树7.3.3 二叉树转换为树和森林7.4 树和森林的遍历7.4.1 树的遍历7.4.2 森林的遍历7.5 树的应用举例7.5.1 判定树7.5.2 集合的表示7.5.3 等价问题小结习题第8章 图8.1 图的基本概念8.1.1 图的定义和术语8.1.2 图的基本操作8.2 图的存储结构8.2.1 邻接矩阵8.2.2 邻接表8.2.3 十字链表8.2.4 邻接多重表8.3 图的遍历8.3.1 深度优先搜索8.3.2 广度优先搜索8.3.3 应用图的遍历判定图的连通性8.3.4 生成树和生成森林8.4 最小生成树8.4.1 最小生成树的概念8.4.2 普里姆(Prim)算法8.4.3 克鲁斯卡尔(Kruskal)算法8.5 最短路径8.5.1 迪杰斯特拉(Dijkstra)算法8.5.2 弗洛伊德(Floyd)算法8.6 拓扑排序与关键路径8.6.1 有向无环图的概念8.6.2 拓扑排序8.6.3 关键路径小结习题第9章 查找9.1 基本概念9.1.1 相关术语9.1.2 查找表结构9.2 静态查找表9.2.1 顺序查找9.2.2 折半查找9.2.3 插值查找和斐波那契查找9.2.4 分块查找9.3 二叉排序树9.3.1 二叉排序树的定义9.3.2 二叉排序树的查找过程9.3.3 二叉排序树的插入操作9.3.4 二叉排序树的删除操作9.4 平衡二叉树9.4.1 平衡二叉树的定义9.4.2 平衡二叉树的平衡化旋转9.4.3 平衡二叉树的插入9.4.4 平衡二叉树的查找性能分析9.5 B树和B+树9.5.1 B树的定义9.5.2 B树的查找9.5.3 B树的插入9.5.4 B树的删除9.5.5 B+树9.6 哈希表查找9.6.1 哈希表与哈希方法9.6.2 常用的哈希函数9.6.3 处理冲突的方法9.6.4 哈希表的查找性能分析小结习题第10章 排序10.1 排序的基本概念10.1.1 相关术语10.1.2 排序的时间开销10.2 插入排序10.2.1 直接插入排序10.2.2 折半插入排序10.2.3 表插入排序10.2.4 希尔排序10.3 交换排序10.3.1 冒泡排序10.3.2 快速排序10.4 选择排序10.4.1 简单选择排序10.4.2 树形选择排序10.4.3 堆排序10.5 归并排序10.6 基数排序10.6.1 多关键码排序10.6.2 链式基数排序10.7 外排序10.7.1 外部排序的方法10.7.2 多路平衡归并的实现小结习题参考文献
章节摘录
1.1数据结构的概念 计算机在发展的初期,其应用范围是数值计算,所处理的数据都是整型、实型、布尔型等简单数据,以此为加工、处理对象的程序设计称为数值型程序设计。随着计算技术的发展,计算机逐渐进入到商业、制造业等其他领域,广泛地应用于数据处理和过程控制中。与此相对应,计算机所处理的数据也不再是简单的数值,而是字符串、图形、图像、语音、视频等复杂的数据。这些复杂的数据不仅量大,而且具有一定的结构。例如,一幅图像是一个由简单数值组成的矩阵,一个图形中的几何坐标可以组成表。此外,语言编译过程中所使用的栈、符号表和语法树,操作系统中用到的队列、磁盘目录树等,都是有结构的数据。数据结构所研究的就是这些有结构的数据,因此,数据结构的知识不论对研制系统软件还是开发应用软件都非常重要,它是学习软件知识和提高软件设计水平的重要基础。 数据结构是计算机科学与技术专业的基础课,也是核心课程。所有的计算机系统软件和应用软件都要用到各种类型的数据结构。因此,要想更好地运用计算机来解决实际问题,仅掌握几种计算机程序设计语言是难以应付众多复杂课题的。要想有效地使用计算机并充分发挥计算机的性能,还必须学习和掌握好数据结构的有关知识。打好数据结构这门课程的扎实基础,对于学习计算机专业的其他课程,如操作系统、编译原理、数据库原理、软件工程、人工智能等都是十分有益的。
图书封面
评论、评分、阅读与下载