图书前言

前言数据结构是计算机及相关专业的核心课程,也是计算机及相关专业硕士研究生入学考试的必考科目,而且是理工专业的热门公选课程。作为程序设计的重要补充和延伸,数据结构所讨论的知识内容、蕴含的技术方法、体现的思维方式,无论进一步学习计算机专业的其他课程,还是从事计算机领域的各项工作,都有着不可替代的作用。

数据结构课程的知识丰富,内容抽象,隐藏在各知识单元的概念和方法较多,贯穿于各知识单元的链表和递归更是加重了学习难度。笔者长期从事数据结构的研究和教学,深切理解学生在学习数据结构过程中遇到的问题和困惑,深入探究掌握数据结构的有效途径和方法,深刻思考数据结构对培养程序设计和计算思维的地位和作用,深度把握课程的教学目标和重点难点。本书第1版于2005年7月出版,第2版于2011年6月出版,国内有超过100所院校将本书作为主讲教材,第3版在体例和主要内容保持不变的基础上,在教学内容和教学设计等方面进行了如下处理。

① 合理规划教学内容。紧扣《高等学校计算机专业核心课程教学实施方案》和《计算机学科硕士研究生入学考试大纲》,涵盖教学方案及考研大纲要求的全部知识点。

② 遵循认知规律,厘清教学主线。根据学生的认知规律和课程的知识结构,按照从已知到未知的思维进程逐步推进教学内容,梳理和规划各知识单元及其拓扑结构,设计清晰的教学主线。知识单元及其拓扑结构如图1所示。

③ 提炼基础知识,适当扩展提高。考虑到不同学校教学要求的差异以及不同学生学习需求的差别,一方面本着“够用、实用”的原则,抓牢核心概念,提炼基础性知识,贯彻数据结构课程的基本教学要求;另一方面对某些知识点进行适当的扩充和提高(图1中打星号部分),这部分内容可用于选讲,也可用于学生自学或课外阅读(教学建议: 目录中打一个星号的可用于选讲,打两个星号的可用于课外阅读,其他是必讲的基础知识)。数据结构——从概念到C++实现(第3版)前言

④ 兼顾概念层和实现层。从抽象数据类型的角度将数据结构的实现过程分为抽象层、设计层和实现层,其中抽象层定义数据结构和基本操作集合,设计层是数据结构的存储表示和算法设计,实现层用C++语言实现数据结构,既强调了数据结构的基本概念和原理方法,又注重了数据结构的程序实现和实际运用。

⑤ 展现求解过程,培养计算思维。通过讲思路、讲过程、讲方法,按照“问题→想法→算法→程序”的模式进行问题求解,采用“阐述基本思想→伪代码描述算法→C++语言实现算法”的模式进行算法设计与实现,这个过程正是计算思维的运用过程。每章通过两个应用实例展示了问题求解过程以及算法设计过程。

⑥ 明确重点,化解难点。每一章开篇即给出该章的重点难点,以及各知识点的教学要求,在具体阐述时提供针对性的处理方法。针对数据结构内容抽象的特点,全书设计了大量插图,将抽象内容进行了具体化处理,降低了理解问题的复杂性。

总之,本书在概念的描述、实例的选择、知识的前后衔接、内容的组织结构,以及教学内容的理解、教学目标的实现、教学意图的融入、教学方法的运用等方面进行了系统思考和统筹设计,力图通过本书为读者构建多层次的知识体系。在问题求解层面,以数据表示和数据处理为主线,给出“问题→想法→算法→程序”的思维模式;在算法设计层面,通过伪代码描述算法,强调计算思维的培养;在算法分析层面,理解什么是“好”算法,给出算法分析的基本方法;在存储结构层面,通过存储示意图理解数据表示,再给出存储结构定义;在程序实现层面,给出所有数据结构的C++程序实现以及使用范例;在数据结构和算法的运用层面,通过应用实例理解如何为求解问题设计适当的数据结构,如何基于数据结构设计算法,从而将数据结构、算法和程序设计有机地融合在一起。

参加本书编写的还有王涛、党源源、肖巍、刘冰等,2015级本科生陈圣、陈甲旺、房子龙同学参与了本书的代码调试工作,所有代码均在DevC++ 5.8.1、Code::Blocks 1601、Cfree 5.0编程环境下调试通过。本书采用C++11标准,具体变化是: ①用nullptr取代NULL; ②定义模板时,用typename取代class; ③定义对象变量时,用花括号{}取代圆括号()。本书程序源代码均以二维码形式提供,使用前请阅读readme(二维码)。

由于作者的知识和写作水平有限,书稿虽再三斟酌几经修改,仍难免有缺点,欢迎专家和读者批评指正。作者的电子邮箱是: wanghm@ccut.edu.cn。

作者

2019年2月