前言 《数据结构(Python版)》于2019年4月正式出版以来,经过了几次印刷,许多高等学校已将其作为“数据结构”课程的教材。本书不仅深受这些学校师生的钟爱,而且也获得了良好的社会效益。但从另外一个角度来看,作者有责任和义务维护好这本书的质量,及时更新本书的内容,做到与时俱进。 本书修订内容如下。 (1) 重新对每章内容进行了梳理。 (2) 第2~8章中,每章都增加了实验题及其解答,便于提高读者动手能力。 (3) 针对每章章后的应用题,重新对程序进行了运行和调试,使习题答案准确无误。 (4) 针对每章的重点或难点的算法和实验,配置了微课视频进行讲解。 (5) 删去了附录A的考试试题,而是将试题及其答案作为教辅资源,供读者下载。 希望通过这样的修订,让更多的教师和学生喜欢本书,也希望本书信息容量大、知识性强的特色能够很好地延续下去。 本书的作者为吕云翔、郭颖美、孟爻、吴宜航、杨壮,曾洪立参与了部分内容的编写并进行了素材整理及配套资源制作等。 书中如有不当,请读者不吝赐教,及时提出宝贵意见。 作者 2023年3月 第1版前言 随着近年来计算概念的快速拓展,计算科学已经发展成为一个内涵繁杂的综合性学科,其至少可以划分为计算机工程(CE)、计算机科学(CS)、信息系统(IS)、信息技术(IT)和软件工程(SE)5个领域,而且不同领域的人才所应具备的知识结构与能力侧重也不尽相同。尽管如此,数据结构在各领域的知识体系中仍然占据着重要的位置。“数据结构”是普通高等学校计算机专业和信息管理专业的一门必修课程,主要讨论数据的逻辑结构、在计算机中的存储结构以及对其进行的各种处理运算的方法和算法。 N.Wirth早在20世纪70年代就指出“程序=数据结构+算法”。数据结构主要研究数据在计算机中存储、组织、传递和转换的过程及方法,这些也是构成与支撑算法的基础。近年来,随着面向对象技术的广泛应用,从数据结构的定义、分类、组成到设计、实现与分析的模式和方法都有了长足的发展,现代数据结构更加注重和强调数据结构的整体性、通用性、复用性、间接性和安全性。 基于上述情况,本书选择Python作为描述语言。Python语言语法简洁优美,功能强大,有着广泛的应用领域,如互联网、大数据、人工智能等领域。因此,学习Python语言,在未来的学习和工作中,都有用武之地。同时,Python语言相对于大多数高级语言,更加适合初学者学习,Python的语法与伪代码描述很相似,逻辑清晰; 此外,Python语言也同样具有大部分高级语言的特性,对计算机相关专业的学生未来学习其他编程语言有所帮助。 在内容的选取与结构安排上,本书通过分类和讲解典型结构使读者对数据结构形成宏观认识。根据内容的侧重,本书分8章,分别为绪论、线性表、栈和队列、串和数组、树结构、图、排序和查找。 第1章介绍数据结构的基本概念、算法描述、算法的时间复杂度和空间复杂度等内容。本章是全书的基础。 第2章主要介绍线性表的基本概念和抽象数据类型的定义、线性表的顺序和链式两种存储方式的标识,以及线性表的基本操作实现和相应应用。 第3章简要介绍栈和队列的基本概念和抽象数据类型定义、栈和队列在顺序存储和链式存储结构下的基本操作和应用。 第4章主要介绍串的基本概念和数据类型定义,串的存储结构、基本操作实现和应用等内容。 第5章主要介绍树和二叉树的基本概念,详细介绍二叉树的性质和存储结构、便利方法的实现及应用、哈夫曼树的概念和构造方法。 第6章主要介绍图的基本概念、抽象数据类型定义、存储结构和遍历方法,还介绍最小生成树的基本概念和方法、最短路径的相关算法、拓扑排序的概念和实现方法。 第7章介绍排序的基本概念,插入排序、交换排序、选择排序、归并排序等多种排序的原理、实现方法及性能分析。 第8章主要介绍查找的基本概念,顺序查找、二分查找等的原理、实现方法和性能分析,平衡二叉树、哈希表的概念、结构定义和实现方法。 本书的理论知识的教学安排建议如下表所示。 章节 内容 学时数 第1章 绪论 2 第2章 线性表 4~6 第3章 栈和队列 6~8 第4章 串和数组 2~4 第5章 树结构 6~8 第6章 图 4~8 第7章 排序 4~6 第8章 查找 4~6 建议先修课程: Python语言。 建议理论教学时数: 32~48学时。 建议实验(实践)教学时数: 16~32学时。 本书中的所有算法都已经通过上机调试,尽量保证算法的正确性。在每章内容后都有小结,便于读者复习总结,并配有丰富的习题,包括选择题、填空题、算法设计题等,给读者更多的思考空间。 本书在以下几方面具有突出特色。 (1) 内容精炼,强化基础,合理安排内容结构,做到深入浅出、循序渐进。 本书各章节都从基本概念入手,逐步介绍其特点和基本操作的实现,把重点放在基础知识的介绍上,缩减难度较大的内容,使理论叙述简洁明了、重点突出、详略得当。 (2) 应用实例丰富、完整。 本书通过丰富的应用实例和源代码使理论和应用紧密结合,增强学生的理解能力,锻炼程序设计思维。代码有详细明了的注释,易于阅读。 (3) 每章后面附有小结和习题,便于学习、总结和提高。 本书结合学生的学习实际选择难度适中、逻辑合理、适于初学者和进阶者开拓思路、深入了解数据结构使用方法和技巧的习题,并附有详细的解答过程和注意要点,达到通俗易懂、深入浅出的效果,培养读者迁移知识的能力。 (4) 采用Python抽象类体现方法的通用性。 本书采用面向对象的观点讨论数据结构技术,先将抽象数据类型定义成接口,再结合具体的存储结构加以实现,并以各实现类为线索对类中各种操作的实现方法加以说明。 (5) 图文并茂,便于读者直观地理解数据结构与算法。 本书通过图表的方式对数据结构及相应操作进行简单直接的描述,使内容更加浅显易懂。 教师可以按照自己对数据结构的理解适当地跳过一些章节,也可以根据教学目标灵活地调整章节的顺序,增减各章的学时数。 本书的作者为吕云翔、郭颖美、孟爻,曾洪立、吕彼佳、姜彦华参与了部分内容的编写并进行了素材整理及配套资源制作等。 由于数据结构本身还在探索之中,加上作者的水平和能力有限,书中难免有疏漏之处,恳请各位同仁和广大读者给予批评指正,也希望各位能将实践过程中的经验和心得与作者交流。 作者 2019年1月