一、教材特点
本教材侧重数据结构和算法在实际工程项目中的应用,具备如下特点:
1.弱化公式推导和证明,强调数据结构和算法的实现。
2.使用C语言描述数据结构和算法,不使用伪代码,教材代码可运行,便于读者上机练习。
3.在有限的篇幅内使代码尽可能地接近企业级,例如,在实现顺序表、链表、栈和队列等简单数据结构时,尽量“封装”数据和操作(虽然这不是C语言的特点);在实现排序和查找算法时,代码模仿C++标准库(STL)编写。
4.相比传统数据结构教材以及本教材的上一个版本,本教材对跳表、平衡树、字典树等工程中常用的数据结构和算法进行了更为详细的介绍,同时去除了广义表、数组压缩和串等工程中不常用或者算法思想已被其他章节内容覆盖的内容。
5.为了便于读者通过C语言代码理解数据结构和算法,本教材中所有公式、图例中关于数据元素序号的部分,一律从0开始编号。
二、基本信息
由于本教材侧重于数据结构和算法的实际应用,故适用于应用型本科或高职院校计算机及其相关专业的学生学习,不适合研究生、研究型本科院校及考研学生使用。
学习本教材需要具备C语言程序设计的基础。学习本教材后,读者能够掌握常用数据结构和一些初级算法的原理和实现方法,在进行真实项目开发中能够为特定的应用场景选取恰当的数据结构和算法。
本教材共分8章:第1章绪论、第2章线性表、第3章栈和队列、第4章树和二叉树、第5章图、第6章排序、第7章查找以及第8章综合上机练习。其中,第1~3章由刘振宇编写,第4章由邱建华编写,第5章由杨勇虎编写,第6~7章由张冬青编写,第8章由周帅编写。最后由张冬青负责完成统稿。
由于时间仓促和编者水平有限,教材中难免存在不妥或疏漏之处,敬请广大读者和专家不吝赐教。编者邮箱:liuzhenyu@neusoft.edu.cn。三、教材基本结构与内容组织
各个章节内在联系示意图
第1章绪论1
1.1数据、数据元素、数据项2
1.2什么是数据结构2
1.2.1数据的逻辑结构2
1.2.2数据的存储结构4
1.3算法4
1.4为什么要学习数据结构5
习题7
部分习题解析7
第2章线性表8
2.1线性表的基本定义9
2.2线性表的顺序表示和实现9
2.2.1顺序表的基本概念和特点10
2.2.2顺序表的实现11
2.3线性表的链式表示和实现18
2.3.1链表的基本概念18
2.3.2链表的实现19
2.4线性表的应用30
2.5本章小结34
习题35
部分习题解析38
第3章栈和队列39
3.1栈的特点40
3.2栈的实现41
3.2.1顺序栈的实现41
3.2.2链式栈的实现43
3.3栈的应用47
3.3.1表达式求值47
3.3.2回溯法求解n皇后问题50
3.4队列的特点53
3.5队列的实现54
3.6队列的应用58
3.7本章小结60
习题60
部分习题解析63
第4章树和二叉树64
4.1树的定义和基本术语65
4.1.1树的定义65
4.1.2树的基本术语65
4.2二叉树66
4.2.1二叉树的定义67
4.2.2二叉树的形态68
4.2.3二叉树的性质68
4.2.4二叉树的应用70
4.3树、森林向二叉树的转换71
4.3.1树向二叉树的转换71
4.3.2森林向二叉树的转换71
4.4二叉树和树的存储结构72
4.4.1二叉树的存储结构72
4.4.2树的存储结构74
4.5树与二叉树的遍历77
4.5.1二叉树的遍历77
4.5.2树的遍历79
4.5.3二叉树遍历的实现80
4.6哈夫曼树83
4.6.1哈夫曼树的基本概念83
4.6.2构造哈夫曼树84
4.6.3哈夫曼编码88
4.7并查集91
4.7.1并查集的主要操作91
4.7.2并查集的实现93
4.8本章小结96
习题96
部分习题解析99
第5章图101
5.1图的基本概念102
5.2图的顺序存储105
5.2.1邻接矩阵105
5.2.2图的顺序存储实现106
5.3图的链式存储109
5.3.1图的邻接表存储109
5.3.2有向图的十字链表存储112
5.4图的遍历118
5.4.1深度优先搜索遍历118
5.4.2广度优先搜索遍历120
5.4.3遍历测试代码121
5.5图的连通性122
5.5.1图的连通性122
5.5.2生成树和生成森林125
5.6最小生成树126
5.6.1克鲁斯卡尔(Kruskal)算法127
5.6.2普里姆(Prim)算法130
5.7最短路径133
5.7.1单源最短路径134
5.7.2多源最短路径137
5.8AOV网与拓扑排序140
5.8.1AOV网140
5.8.2拓扑排序141
5.9AOE网与关键路径145
5.9.1AOE网145
5.9.2关键路径146
5.10本章小结150
习题150
部分习题解析154
第6章排序156
6.1基本概念157
6.2选择排序158
6.3冒泡排序与鸡尾酒排序161
6.3.1冒泡排序161
6.3.2鸡尾酒排序163
6.4插入排序166
6.5希尔排序169
6.6堆排序与优先队列171
6.6.1堆172
6.6.2堆排序176
6.6.3部分排序183
6.6.4优先队列184
6.7快速排序189
6.8归并排序195
6.9桶排序198
6.10基数排序200
6.11计数排序202
6.12排序算法的应用203
6.13本章小结204
习题205
部分习题解析208
第7章查找210
7.1什么是查找211
7.2相关概念211
7.3查找算法的度量212
7.4静态查找213
7.4.1顺序查找213
7.4.2折半查找与插值查找215
7.4.3分块查找219
7.5动态查找之搜索树220
7.5.1二叉查找树221
7.5.2Trie树229
7.6动态查找之平衡二叉树233
7.6.1AVL树234
7.6.2红黑树243
7.7动态查找之跳表248
7.8动态查找之B树251
7.8.1B树251
7.8.2B+树259
7.9动态查找之哈希261
7.9.1哈希的概念261
7.9.2哈希函数263
7.9.3冲突处理264
7.9.4哈希表的容量267
7.10本章小结269
习题270
部分习题解析275第8章综合上机练习276
8.1八数码问题277
8.1.1问题建模277
8.1.2广度优先搜索求解八数码问题277
8.1.3A算法简介281
8.1.4迭代加深的A算法求解八数码问题283
8.2进一步学习建议286
习题287
附录1学习知识要点及能力要点288
附录2知识点索引291
2016年6月,中国成为国际本科工程学位互认协议《华盛顿协议》的正式会员,这是中国工程教育国际化进程的重要里程碑。“回归工程”、培养学生的“大工程观”是当今国际工程教育的主流理念。《华盛顿协议》对毕业生提出的12条素质要求中,不仅要求工程知识、工程能力,还强调通用能力和品德伦理;在实践上,以学生为中心,以产出为导向,注重对目标达成的支撑及持续改进,与CDIO工程教育实质等效。
CDIO工程教育是近年来国际工程教育改革的最新成果,以“预期学习结果”集合来驱动课程内容、教学方法、教育文化的设计,重视营造工程教育文化,其注重工程能力培养和基于工程项目全生命周期的一体化设计思想,对于国内工程类和相关专业的建设具有重要的实施价值。
作为承载了教学改革思想的载体,融入CDIO工程教育理念的高品质教材,东软CDIO工程教育教材在注重理实结合的同时,也注重对学生八大能力的培养,即:技术知识与推理能力,开放式思维与创新,个人职业能力,沟通表达与团队合作,态度与习惯,责任,价值观,实践构思、设计、实现和运行对社会的贡献。
CDIO工程教育教材是 CDIO教育教学改革在教学实施过程中的集中体现,它不仅承载着课程和项目的教学内容,而且贯穿和体现了CDIO工程教育的理念、思想与方法,是在系统化理论的指导下,将知识、能力、素质培养进行一体化设计,有机融合在教材体系中。教材的编写以能力培养为主线,以案例教学为引导,以项目为载体,充分体现“做中学”和“学中做”的思想,具有以下优势:
(1)以能力培养为主线,培养学生专业知识学习能力和工程实践能力。
(2)以案例为驱动,在做案例的过程中学习新知识,充分体现了“做中学”。
(3)以项目为载体,基于工程化教育方法,按照分析、设计、实施、运行展开项目及知识点的讲解。
(4)围绕专业知识结构和能力体系设计教材,实现同一专业下不同教材紧密的关联性。
(5)内容编排循序渐进,符合人的认知规律。
(6)适应柔性化教学变革,构建一体化、立体化教学资源。
CDIO工程教育教材可供以应用型人才为培养目标的高等院校以及职业培训机构作为教材使用。
目前,CDIO工程教育教材的建设还处于探索阶段,是一项创造性的工作,尚需要通过改革的实践不断加以深化和持续改进,任重而道远。