程序设计是计算机专业人员十分重要的基本功,是软件设计的基础。然而,程序设计的基本功并不在程序设计中,而在程序设计外。程序设计课程提供了特定的指令、语法、语句的编写规则,学习这些规则仅仅是一种最基础的编程训练,不能解决如何提高编程能力的问题。这与许多应用型普通高校初学程序设计课程的学生反映出来的情况是一致的,
即由于数学基础和物理基础方面的原因,如果程序设计中必备的数理逻辑推理和思维能力不强,
就会使这部分学生普遍感到学习程序设计课程困难,这种困难有可能使
他们对自己的编程能力产生怀疑,从而影响他们对计算机专业的认同感和归属感。
程序设计是用来解决问题的,解决问题的关键是面对实际问题时有没有解题思路,
进而在解题思路的基础上找出解决问题的步骤,对其优化,最终形成一个解题的算法。在软件设计的实践中,问题千奇百怪,五花八门,没有一个定式,但迄今为止,大多数在计算机领域已经出现的问题都有一些共性,有一些相同的数据现象。研究这些共性和数据现象,寻求解决各类问题的普适算法,可以有效提高编程能力,使得计算机专业的学生喜欢编程、热爱编程,并具备较强的编程能力,成为一个合格的计算机专业人才。在计算机类专业课程体系中,数据结构就是这样一门
能够提供解决具有共性问题的通用方法和有效提高编程能力的基础性课程。
数据结构原本是计算机类专业的重要核心基础课程,近年来,随着信息技术的飞速发展,该课程的重要性已经为从事信息技术及其相关专业教学和研究的同仁所认识。现在,数据结构已经不再是计算机类专业独有的课程,逐渐演变成我国大学中许多专业的重要基础课,如数学类、电子技术类、信息技术类等专业。
我国计算机类专业分为科学研究型、工程技术开发型、技术推广应用型三个层次。本书编写的深度和难度定位在后两个层次。本书参考了国内外经典教材,较全面地组织、安排书中的内容; 提供了大量的经典算法,并适当引入考研典型例题,具有很强的实用性、易读性、针对性,融入了编者多年的教学经验和体会; 体系结构科学合理,内容精炼。每章都附有一定量的习题,其中,部分选自近年来的考研题目,以帮助学生深入学习和理解相关章节的内容,并为学生考研提供一定的帮助。
本书第2~9章附有实训部分,对相应章节的教学内容给出实训要求和实训项目,并将一些典型算法作为实训案例,给出了类定义、算法实现的源代码。读者可以在Python语言编程环境下直接运行。本书提供了资源包,其他算法可参考本书的资源包。
近年来,随着大数据,云计算和人工智能技术的兴起,Python语言成为流行的编程语言,一些高校的计算机类专业开始引入Python作为程序设计入门语言,因此,用Python语言描述的数据结构、算法设计与分析等课程成为教学需求。在此背景下,我们编写了本书。
本书共分10章,分别为绪论、线性表、
栈和队列、串、数组和广义表、
树与二叉树、图、查找、排序以及文件。
第1章概述数据结构可能涉及的内容和分析方法,讲述了算法和程序的差异、算法的评价
与分析等问题。
第2~5章讲述线性表结构、特殊线性表栈和队列、串、数组与广义表。从顺序存储结构和链表结构两个方面来阐述线性表的存储结构和建立在存储结构上的算法设计,以及线性表的广泛应用,如栈、队列、串、数组、广义表等,并进一步讨论了这些数据结构的应用,如程序调用、皇后问题、火车编组问题等。
第6章主要讨论树。介绍了树的性质、
存储结构和基本运算。讨论了二叉树的创建,前序、中序、后序、层次和欧拉遍历算法,以及二叉树的其他问题。还讨论了线索二叉树及其应用、哈夫曼树和哈夫曼编码、二叉排序树、平衡二叉树、二叉表示树、判定树等问题。
第7章讨论图。内容包括图的定义、图的存储结构
、图的遍历和图的连通分量、最小生成树、最短路径、拓扑排序和关键路径等。
第8章和第9章讨论目前常见的查找算法和排序算法。在查找算法中,从静态查找表、动态查找表和哈希表三方面来研究查找算法。静态查找表的数据结构是线性表,动态查找表主要有二叉树查找、B树查找等,哈希表的构造和查找则用哈希算法来实现。在排序算法中分为内排序和外排序两部分: 内排序中主要讨论了插入排序、交换排序、选择排序、归并排序和基数排序等经典的排序算法; 外排序讨论了磁盘排序、胜者树和败者树、最佳归并树和磁带排序等。
第10章讨论了文件。从文件的存储结构入手讨论文件的管理,介绍了顺序文件、索引文件、索引顺序文件、散列文件、多关键字文件等。
上述内容涵盖了目前国内数据结构教材的几乎所有内容,有的进行了深入的讨论,有的比较初步,这与本书编写的指导思想有关。
本书由王震江任主编,王勇刚、万英、杨七九、和添锦任副主编。其中,全书的基本内容由王震江编写,万英编写了第1~3章的代码,王勇刚编写了第4、6、7章的代码,和添锦编写了第5章的代码,杨七九编写了第8章的代码,王震江编写了第9章的代码。王震江对全书进行了统稿和审查,统一了图例,并统一编写了实训内容和要求。书中提供的算法全部通过了上机调试。
由于作者水平有限,编写仓促,书中难免存在疏漏之处,敬请读者不吝赐教。
本书配套教学大纲、PPT课件、思政内容、微课视频等丰富的教学资料。读者扫描本书封底文泉课堂涂层下的二维码并绑定微信账号后,即可观看视频。其他教学资源(教学大纲、思政内容、课件等)可以从清华大学出版社官方微信公众号书圈(itshuquan)下载。
编者
2022年1月
于丽江