本教材是为以Python作为入门语言的大数据、人工智能及相关专业本专科学生编写的基于Python语言的数据结构教材。本教材面向应用型人才培养,侧重于数据结构和算法在实际工程项目中的应用,同时教材基于混合式教育教学理念编写,具备如下的特点:
1.弱化公式推导和证明,强调数据结构和算法的实现。
2.使用Python语言描述数据结构和算法(目前市场上可供本专业使用的Python版本数据结构教材极为稀少)不使用伪代码,教材代码可运行,便于读者上机练习。
3.代码和案例尽可能地接近企业级。
4.相比传统数据结构教材,本教材对跳表、平衡树、字典树等工程中常用的数据结构和算法进行了更为详细的介绍,同时结合Python语言的特点,去除了广义表、数组压缩和串等内容。
5.针对混合式教学需要,教材的每一章配有章节目标、预习目标,以及相应的课前测试题和作业题。
6.与同类教材相比,本教材的作业题中除了基本的选择、简答和编程题,还包含了结合实际工程应用背景的应用题,帮助学生学以致用,深入理解和体会所学内容在实际中的作用和意义。
7.除了排序和查找,教材的每一章都提供应用小节,介绍本章知识点的具体应用。
由于本教材侧重于数据结构和算法的实际应用,更适合于应用型本科或高职院校计算机、大数据、人工智能等相关专业的学生学习,不适合研究生、研究型本科院校及考研学生使用。
学习本教材需要具备Python语言程序设计的基础,学习本教材后,读者能够掌握常用数据结构和一些初级算法的原理和实现方法,在进行真实项目开发中能够为特定的应用场景选取恰当的数据结构和算法。
教材共分为7章,其中第1章至第3章由刘振宇、陈明华编写,第4章由邱建华编写,第5章由杨勇虎编写,第6章至第7章由张冬青编写,陈明华负责全教材统稿。
由于时间仓促和编者水平有限,教材中难免存在不妥或疏漏之处,敬请广大读者和专家不吝赐教。编者邮箱:chenminghua@neusoft.edu.cn。
第1章绪论1
预习测试2
1.1数据、数据元素、数据项3
1.2什么是数据结构3
1.2.1数据的逻辑结构3
1.2.2数据的存储结构5
1.3算法5
1.4为什么要学习数据结构7
课后作业8
第2章线性表10
预习测试11
2.1线性表的基本定义14
2.2线性表的索引表示和实现14
2.2.1索引表的基本概念和特点15
2.2.2索引表的实现16
2.3线性表的链式表示和实现20
2.3.1链表的基本概念20
2.3.2链表的实现22
2.4线性表的应用31
2.5本章案例33
2.6本章小结33
课后作业34
第3章栈和队列37
预习测试38
3.1栈及其抽象类型定义40
3.1.1什么是栈40
3.1.2栈的抽象类型定义41
3.2栈的实现41
3.2.1索引栈的实现41
3.2.2链式栈的实现43
3.3栈的应用45
3.3.1表达式求值45
3.3.2回溯法求解n皇后问题48
3.4队列及其抽象类型定义50
3.4.1什么是队列50
3.4.2队列的抽象类型定义51
3.5队列的实现51
3.6队列的应用53
3.7本章小结56
课后作业56
第4章树和二叉树58
预习测试60
4.1树的定义和基本术语63
4.1.1树的定义63
4.1.2树的基本术语63
4.2二叉树64
4.2.1二叉树的定义65
4.2.2二叉树的形态66
4.2.3二叉树的性质66
4.2.4二叉树的应用67
4.3树、森林向二叉树的转换68
4.3.1树向二叉树的转换68
4.3.2森林向二叉树的转换69
4.4二叉树和树的存储结构70
4.4.1二叉树的存储结构70
4.4.2树的存储结构72
4.5树与二叉树的遍历75
4.5.1二叉树的遍历75
4.5.2树的遍历77
4.5.3二叉树遍历的实现77
4.6二叉树的应用——哈夫曼树80
4.6.1哈夫曼树的基本概念80
4.6.2构造哈夫曼树82
4.6.3哈夫曼编码87
4.7二叉树的应用——并查集90
4.7.1并查集的主要操作90
4.7.2并查集的实现92
4.8本章小结94
课后作业94
第5章图97
预习测试99
5.1图的基本概念103
5.1.1概念103
5.1.2抽象数据类型定义105
5.2图的邻接矩阵存储106
5.2.1邻接矩阵106
5.2.2图的邻接矩阵存储实现107
5.3图的邻接表存储109
5.3.1邻接表109
5.3.2有向图的十字链表存储112
5.4图的遍历116
5.4.1深度优先搜索遍历117
5.4.2广度优先搜索遍历118
5.4.3遍历测试代码119
5.5图的连通性120
5.5.1图的连通性120
5.5.2生成树和生成森林122
5.6最小生成树123
5.6.1克鲁斯卡尔(Kruskal)算法124
5.6.2普里姆(Prim)算法126
5.7最短路径129
5.7.1单源最短路径129
5.7.2多源最短路径132
5.8图的应用135
5.8.1AOV网与拓扑排序135
5.8.2AOE网与关键路径139
5.9本章小结143
课后作业144
第6章排序148
预习测试150
6.1基本概念153
6.2选择排序154
6.3冒泡排序与鸡尾酒排序156
6.3.1冒泡排序156
6.3.2鸡尾酒排序158
6.4插入排序161
6.5希尔排序164
6.6堆和优先队列166
6.6.1堆167
6.6.2堆排序170
6.6.3部分排序177
6.6.4优先队列178
6.7快速排序181
6.8归并排序186
6.9桶排序189
6.10基数排序191
6.11计数排序193
6.12排序算法的应用193
6.13本章小结194
课后作业196
第7章查找198
预习测试200
7.1什么是查找204
7.2相关概念204
7.3查找算法的度量205
7.4静态查找206
7.4.1顺序查找206
7.4.2折半查找与插值查找207
7.4.3分块查找212
7.5动态查找之搜索树213
7.5.1二叉查找树213
7.5.2Trie树221
7.6动态查找之平衡二叉树225
7.6.1AVL树225
7.6.2红黑树235
7.7动态查找之跳表240
7.8动态查找之B树242
7.8.1B树242
7.8.2B+树250
7.9动态查找之哈希253
7.9.1哈希的概念253
7.9.2哈希函数254
7.9.3冲突处理256
7.9.4哈希表的容量259
7.10本章小结261
课后作业262
第8章综合练习266
8.1物品推荐问题267
8.2基于用户的协同推荐算法267
8.2.1相似用户选取267
8.2.2物品推荐270
8.2.3K个相似用户的计算271
8.2.4对用户相似度的改进271
8.3进一步学习建议271
习题272
参考文献273
2016年6月,中国成为国际本科工程学位互认协议《华盛顿协议》的正式会员,这是中国工程教育国际化进程的重要里程碑。“回归工程”、培养学生的“大工程观”是当今国际工程教育的主流理念。《华盛顿协议》对毕业生提出的12条素质要求中,不仅要求工程知识、工程能力,还强调通用能力和品德伦理;在实践上,以学生为中心,以产出为导向,注重对目标达成的支撑及持续改进,与CDIO工程教育实质等效。
CDIO工程教育是近年来国际工程教育改革的最新成果,以“预期学习结果”集合来驱动课程内容、教学方法、教育文化的设计,重视营造工程教育文化,其注重工程能力培养和基于工程项目全生命周期的一体化设计思想,对于国内工程类和相关专业的建设具有重要的实施价值。
作为承载了教学改革思想的载体,融入CDIO工程教育理念的高品质教材,东软CDIO工程教育教材在注重理实结合的同时,也注重对学生八大能力的培养,即:技术知识与推理能力,开放式思维与创新,个人职业能力,沟通表达与团队合作,态度与习惯,责任,价值观,实践构思、设计、实现和运行对社会的贡献。
CDIO工程教育教材是 CDIO教育教学改革在教学实施过程中的集中体现,它不仅承载着课程和项目的教学内容,而且贯穿和体现了CDIO工程教育的理念、思想与方法,是在系统化理论的指导下,将知识、能力、素质培养进行一体化设计,有机融合在教材体系中。教材的编写以能力培养为主线,以案例教学为引导,以项目为载体,充分体现“做中学”和“学中做”的思想,具有以下优势:
(1)以能力培养为主线,培养学生专业知识学习能力和工程实践能力。
(2)以案例为驱动,在做案例的过程中学习新知识,充分体现了“做中学”。
(3)以项目为载体,基于工程化教育方法,按照分析、设计、实施、运行展开项目及知识点的讲解。
(4)围绕专业知识结构和能力体系设计教材,实现同一专业下不同教材紧密的关联性。
(5)内容编排循序渐进,符合人的认知规律。
(6)适应柔性化教学变革,构建一体化、立体化教学资源。
CDIO工程教育教材可供以应用型人才为培养目标的高等院校以及职业培训机构作为教材使用。
目前,CDIO工程教育教材的建设还处于探索阶段,是一项创造性的工作,尚需要通过改革的实践不断加以深化和持续改进,任重而道远。