前言 数据结构是计算机、软件工程等相关专业一门非常重要的核心课程,是继续深入学习后续课程(如算法设计与分析、操作系统、编译原理、软件工程、机器学习等)的重要基础。随着计算机应用领域的不断发展和海量数据信息的持续增加,数据结构在系统软件设计和应用软件设计中的重要作用更加突出。因此,掌握扎实的数据结构基本知识和技能对于今后的专业学习和软件开发显得格外重要。数据结构作为计算机专业和软件工程专业的一门专业基础课程,对于初学者来说,许多专业术语较为抽象,不容易理解和掌握,本书采用通俗的语言进行讲解,针对每个知识点都给出案例和图表,便于读者真正理解和掌握。 随着大数据、人工智能技术的快速发展,作为学习人工智能、大数据技术的语言基础,Python以其拥有强大的第三方工具库、开发速度快捷、擅长数据分析与处理等优势,被广泛地应用于人工智能、机器学习、大数据分析与处理等领域,受到越来越多的人青睐,目前已成为主流的开发语言之一以及数据分析与处理的首选工具。国内各高校均开设了Python程序设计课程,因此,本书采用Python作为描述语言,也为读者学习人工智能、机器学习、大数据分析与处理打下牢固的语言基础。 本书系统地介绍了数据结构中的线性结构、树结构、图结构及查找、排序技术,阐述了各种数据结构的逻辑关系,讨论了它们在计算机中的存储表示及其运算。本书潜移默化地融入思政元素,理论与实践并重,结合教学工作实际,除了对数据结构中的抽象概念和数据类型的基本运算进行详细讲解外,还通过丰富的图表和实例、完整的代码讲解算法的应用,帮助读者理解每种数据类型常见的基本操作及具体应用案例的算法思想,使其学会运用数据结构知识解决实际问题并能用算法实现。通过算法实现可以强化对算法的理解,因此,本书不仅精选了涵盖知识点丰富且具有代表性的案例,还挑选了一些历年考研试题作为习题,所有算法均采用Python给出完整的实现,以方便读者学习和理解,巩固所学知识。 本书共8章。 第1章为绪论。本章将向读者介绍数据结构的概念以及本书的学习目标、学习方法和学习内容,还介绍了本书对算法的描述方法。 第2章介绍线性表。首先讲解线性表的逻辑结构,然后介绍线性表的各种常用存储结构,在每节均给出了算法的具体应用。通过本章的学习,读者可以掌握顺序表和链表的基本操作及应用。 第3章介绍操作受限的线性表——栈和队列,内容包括栈的定义、栈的基本操作、栈与递归的转换、队列的概念以及顺序队列和链式队列的运算。 第4章介绍串、数组和广义表。串是另一种特殊的线性表,数组和队列可看作线性表的推广。本章首先介绍串的概念、串的各种存储表示以及串的模式匹配算法,然后介绍数组的概念、数组(矩阵)的存储结构及运算、特殊矩阵,最后介绍广义表的概念、表示与存储方式。 第5章介绍非线性数据结构——树和二叉树。首先介绍树和二叉树的概念,然后介绍树和二叉树的存储表示、二叉树的性质、二叉树的遍历和线索化、树和森林与二叉树的转换、并查集及哈夫曼树。 第6章介绍非线性数据结构——图。首先介绍图的概念和存储结构,然后介绍图的遍历、最小生成树、拓扑排序、关键路径及最短路径。 第7章介绍数据结构的常用技术——查找。首先介绍查找的概念,然后结合具体实例介绍静态查找、二叉排序树、平衡二叉树、红黑树、B树和B+树、哈希表,并给出了完整程序。 第8章介绍数据结构的常用技术——排序。首先介绍排序的相关概念,然后介绍各种排序技术,并给出了具体实现算法。 〖1〗数据结构(Python语言描述)前言本书特点 本书教学内容紧紧围绕《高等学校计算机专业核心课程教学实施方案》和《计算机学科硕士研究生入学考试大纲》,涵盖两者要求的全部知识点。本书系作者多年教学实践经验的总结,主要特点如下: (1) 结构清晰,内容全面。针对每个抽象的概念、知识点,配合类比和丰富的图表进行讲解。 (2) 例题典型、丰富。本书例题选取自考研试题和竞赛试题,给出了详细的分析和完整的算法实现。 (3) 理论与实践并重,突出实践。本书在讲解抽象概念和算法思想时,每个算法都给出了具体算法的Python实现,每章均提供了综合案例算法的详细讲解,以图文结合的形式给出具体的过程,最后给出完整算法实现。 相信在学完本书后,读者会在数据结构和算法方面有很大的收获。 参与本书编写的有郑州轻工业大学的黄敏、陈锐、马军霞、张志锋、张世征、谷培培、赵晓君。 配套教学资源 为了方便教师教学和学生学习,本书提供了全面、丰富的教学资源,配套教学资源包括以下内容: (1) 微课视频。 (2) 源程序代码。 (3) PPT课件。 (4) 教学大纲。 (5) 考试样题及习题库。 (6) 上机实验。 超星学习通线上教学资源涵盖丰富的教学内容安排、每节课的教学目标、教学内容、学习文档、章节测验、丰富的题库资源。 致谢 感谢帮助本书问世的所有人,尤其是清华大学出版社的张瑞庆编审,她十分看重本书的应用价值,在她的努力下,本书才得以顺利出版,编者对此深怀感激。 耿国华老师在数据结构和算法领域有着很高的造诣,她在数据结构与算法方面给了我很大启发。 最后还要感谢郑州轻工业大学全体同仁在工作上的帮助及对我写作上的关心与支持。 在编写本书的过程中,编者参阅了大量相关教材、学术著作,个别案例也参考了网络资源,在此向各位作者致敬! 由于编写时间仓促,加上编者水平所限,书中难免存在不足之处,恳请读者指正。读者可通过QQ群(1059130240)与编者进行讨论交流。 编者 2023年11月