前言

随着软件人才发展成为国家发展战略,全国各行业对软件人才的需求量持续增加,尤其是关键领域的高端人才需求更加迫切,这对软件工程、计算机科学与技术等相关专业的人才培养质量提出了更高的要求。而数据结构作为高等院校软件工程、计算机科学与技术等相关专业的一门重要的专业基础课程,不仅是学习算法设计与分析、操作系统、人工智能、机器学习等课程的重要基础,也是软件开发者的必备知识,对软件设计的发展起着举足轻重的作用。

结合多年来的教学实践经验与软件工程专业人才培养目标,针对目前学生学习数据结构存在的缺乏动手实践的问题,本书理论与实践并重,在讲解理论的同时,筛选计算机考研试题、竞赛试题,配合丰富的图表进行讲解,并提供完整的算法实现。同时,考虑到软件行业的发展趋势和岗位需求以Java软件工程师居多的情况,本书所有算法均采用Java语言实现,从而实现教学与实际应用无缝衔接。

本书系统地讲解了数据结构中的线性结构、树形结构、图结构及查找、排序、分治算法、贪心算法、回溯算法,阐述了各种数据结构的逻辑关系,讨论了它们在计算机中的存储表示及其运算。本书理论与实践并重,选取的案例丰富、典型,每一章均提供涵盖所有知识点的综合应用实例,课后习题题型多样,涵盖知识点丰富,并且选取了部分考研试题,以巩固所学的知识点。本书采用Java语言作为描述语言,有详细的讲解和注释,所有代码均上机调试通过,并给出程序的运行结果。

本书内容

本书共11章,分别为数据结构与算法概述,线性表,栈与队列,串、数组与广义表,树和二叉树,图,查找,排序,分治算法,贪心算法和回溯算法。

第1章向刚接触数据结构的读者介绍数据结构是什么,以及本书的学习目标、学习方法和学习内容;另外,还介绍本书对算法的描述方法。

第2章主要介绍线性表。首先讲解线性表的逻辑结构,然后介绍线性表的各种常用存储结构,在每一节均给出了算法的具体应用。通过学习这一章,读者可以掌握顺序表、链表的基本运算及典型应用。

第3章主要介绍操作受限的线性表——栈和队列,内容包括栈和队列的定义、存储结构、基本运算以及栈与递归的转换、栈和队列的典型应用。

第4章主要介绍串、数组与广义表。首先介绍串的概念、存储表示、串的模式匹配算法;然后介绍数组的概念、数组(矩阵)的存储结构及运算、特殊矩阵;最后介绍广义表的概念、存储方式与基本操作。

第5章主要介绍非线性数据结构——树和二叉树。首先介绍树和二叉树的概念,然后介绍树和二叉树的存储表示,二叉树的性质,二叉树的遍历和线索化,树、森林与二叉树的转换,并查集以及哈夫曼树。

第6章主要介绍非线性数据结构——图。首先介绍图的概念和存储结构,然后介绍图的遍历、最小生成树、拓扑排序、关键路径及最短路径。

第7章主要介绍数据结构的常用技术——查找。首先介绍查找的概念,然后结合具体实例介绍静态查找、动态查找以及哈希查找的算法及实现。

第8章主要介绍数据结构的常用技术——排序。首先介绍排序的相关概念,然后介绍插入排序、交换排序、选择排序、归并排序以及基数排序,并给出了具体实现算法。

第9章主要介绍分治算法。首先介绍分治算法的思想,然后针对最大子序列的和、求xn次幂、众数、大整数乘法等问题,讲解如何利用分治法进行求解。

第10章主要介绍贪心算法。首先介绍贪心算法的思想,然后针对找零钱问题、背包问题、删数问题、加油站问题等具体实例,讲解利用贪心算法策略实现算法的求解问题。

第11章主要介绍回溯算法。首先介绍回溯算法的思想,然后针对装载问题、旅行商问题、和式分解等具体实例,讲解如何构造解空间树,以及解空间树的搜索和算法实现。

本书特点

本书内容紧紧围绕《高等学校计算机专业核心课程教学实施方案》,涵盖教学方案和考研大纲要求的知识点。本书系作者多年教学实践经验总结,主要特点如下:

(1)理论与实践并重,突出实践。本书在讲解抽象概念和算法思想时,每个算法都给出了具体算法的Java语言实现,每一章均提供了综合案例的详细讲解,以图文形式给出具体的实现过程,最后给出完整的算法实现。

(2)结构清晰,内容全面。针对每个抽象的概念、知识点,配合类比和丰富的图表进行讲解。

(3)例题典型、丰富。本书例题选自全国著名高校考研试题、竞赛试题,并给出了详细的分析和完整的算法实现。

相信在学完本书后,读者会在数据结构和算法方面有很大的收获。预祝读者在学习本书时有一个愉快的旅程。

配套教学资源

为了方便初学者自学、教师教学和学生学习,本书提供了全面、丰富的教学资源,配套教学资源包括以下内容:

(1)PPT教学课件。

(2)示例源程序代码。

(3)微课视频。

(4)教学大纲。

(5)习题与答案

(6)期末考试样题。

(7)线上教学资源。

(8)作者答疑QQ群。

这些资源可以用微信扫描下面的二维码获取。如果阅读中发现问题或疑问,请联系booksaga@163.com,邮件主题写“图解Java数据结构与算法”。

本书作者及致谢

参加本书编写的有陈锐、黄敏、张世征、徐洁、吕睿。

在本书的出版过程中,得到了郑州轻工业大学和清华大学出版社的大力支持,在此表示衷心感谢。尤其感谢清华大学出版社的编辑为本书出版做出的辛勤努力。

在编写本书的过程中,参阅了大量相关教材、著作,个别案例也参考了网络资源,在此向各位原著者致敬!

由于编写时间仓促,水平所限,书中难免存在不足之处,恳请读者不吝赐教。读者可通过本书下载资源中提供的QQ群进行讨论交流。

作 者

2023年8月