
全书系统介绍了算法与数据结构方面的基本知识,重点阐述了基本数据结构及算法在程序开发中的应用方法。通过深入地学习和分析,能够帮助读者极大地提高软件开发和设计能力。
1. 关于算法与数据结构
随着计算机技术的日益发展,其应用早已不再局限于简单的数值运算,而涉及问题的分析、数据结构框架的设计以及插入、删除、排序、查找等复杂的非数值处理和操作。学习算法与数据结构就是为以后利用计算机高效地开发非数值处理的计算机程序打下坚实的理论、方法和技术基础。
算法与数据结构旨在分析、研究计算机加工的数据对象的特性,以便选择适当的数据结构和存储结构,从而使建立在其上的解决问题的算法达到最优。
随着计算机技术的发展,特别是大数据及人工智能技术的发展与应用,算法的重要性有目共睹。《算法与数据结构(第三版)》是对2011年出版的第二版的修订。本版教材在保持原书基本框架和特色的基础上,增加了蛮力算法、分治算法、贪心算法、回溯算法及分枝限界算法思想及应用实例。
2. 结构安排
全书共分为10章,各章主要内容如下。
第1章: 绪论。主要介绍数据结构和算法的基本概念和术语、C语言的数据类型及用C语言描述算法的要点、C++语言的类与抽象数据类型的关系、C++语言特性及与C语言程序的区别、C++语言验证算法的方法。
第2章: 线性表。主要介绍线性表的逻辑结构、线性表的顺序存储结构和链式存储结构、线性表的应用实例。
第3章: 栈和队列。主要介绍栈和队列的基本概念及存储结构、栈和队列的应用实例、递归的概念及设计方法、递归实现与栈的关系。
第4章: 数组和字符串。主要介绍数组存储结构及应用实例、字符串的基本概念和存储结构、字符串的应用实例。
第5章: 树。主要介绍树和二叉树的基本概念及存储结构、二叉树的应用——哈夫曼树及编码。
第6章: 图。主要介绍图的基本概念及存储结构、图的遍历、图的生成树和最小代价生成树、有向无环图、最短路径、图的应用实例。
第7章: 查找。主要介绍静态查找表、动态查找表、哈希表查找。
第8章: 排序。主要介绍插入排序、交换排序、选择排序、归并排序、基数排序、外部排序。
第9章: 常用算法设计技术。主要介绍蛮力算法、分治算法、贪心算法、回溯算法及分枝限界算法的思想及应用技巧。
第10章: 标准模板库。简单介绍标准模板库的组成及使用要点,同时介绍STL的应用实例。
本书第1、6、9章由陈媛教授编写,第2、5章由何波副教授编写,第3、4章由卢玲副教授编写,第7、8、10章由刘恒洋副教授编写。全书由陈媛教授统稿。
带*的内容为可选内容,不必要求讲解。
3. 本书特点
本书给出的所有算法和程序都采用C语言描述并调试通过,部分算法还增加了C++实现代码,用C和C++两种语言描述算法和数据结构,使数据结构的学习与随后的程序设计课程紧密结合。本书注重可读性和实用性,书中附有大量的图表、程序,使读者能正确、直观地理解问题; 书中每章都有学习要点、习题和上机练习,既便于教学,又便于自学。
本书内容和结构体现了教学改革成果。全书由重庆市精品课程“数据结构”重庆理工大学课程组的教师编写完成。作者都是长期在高校从事“算法与数据结构”教学的一线教师,有丰富的教学经验和软件开发能力。作者从多年的教学经验和多项教研课题的研究成果中,构建了数据结构概念建立和编程思想培养的框架体系,总结提炼了学习本课程的重难点和解决方法,大部分样例都经过整理和组织,以便读者更好地理解掌握。同时,本书获“重庆理工大学教材建设基金资助”。
4. 适用对象
本书只要求读者具有C 语言基础,不要求具有面向对象程序设计基础,通过本书的学习可帮助读者树立面向对象的编程思想。本书可作为计算机专业、信息管理专业及其他相关专业的本专科教材,也可作为广大软件工作者的参考资料。本书既可作为“数据结构与算法”课程的教材,也可作为其他程序类课程的辅导教材。
由于作者水平有限,书中难免有疏漏之处,敬请读者批评指正,以便及时修改。
作者
2019年12月
第1章绪论
1.1数据结构的基本概念与学习方法
1.1.1数据结构的研究对象
1.1.2数据结构的基本概念和基本术语
1.2算法与数据结构
1.2.1算法的概念
1.2.2描述算法的方法
1.2.3算法分析
1.3学习算法与数据结构的意义和方法
1.4C语言的数据类型及其算法描述
1.4.1C语言的基本数据类型概述
1.4.2C语言的数组和结构体数据类型
1.4.3C语言的指针类型概述
1.4.4C语言的函数
1.4.5用C语言验证算法的方法
1.5从C语言到C++语言
1.5.1C++语言的类和抽象数据类型
1.5.2C++语言验证算法的方法
1.5.3C++语言与C语言程序的区别
1.5.4C++语言的重要特性
习题1
上机练习1
第2章线性表
2.1线性表的逻辑结构
2.1.1线性表的定义
2.1.2线性表的运算
2.2线性表的顺序存储结构——顺序表
2.2.1顺序表
2.2.2顺序存储结构的优缺点
2.2.3顺序表上的基本运算
2.3线性表的链式存储结构——链表
2.3.1单链表
2.3.2循环链表和双向链表
2.4线性表的应用示例
2.5C++中的线性表
2.5.1C++中线性表抽象数据类型
2.5.2C++中线性表的顺序存储
2.5.3C++中线性表的链式存储
习题2
上机练习2
第3章栈和队列
3.1栈
3.1.1栈的基本概念
3.1.2栈的顺序存储结构
3.1.3栈的链式存储结构
3.2栈的应用实例
3.2.1表达式求值
3.2.2栈与函数调用
3.2.3栈在回溯法中的应用
3.3队列
3.3.1队列的基本概念
3.3.2队列的顺序存储结构
3.3.3队列的链式存储结构
3.4队列的应用实例
3.4.1舞伴问题
3.4.2打印队列的模拟管理
3.5递归
3.5.1递归的定义及递归模型
3.5.2递归的实现
3.5.3递归设计
3.5.4递归到非递归的转换
3.6C++中的栈和队列
3.6.1C++中的栈
3.6.2C++中的队列
习题3
上机练习3
第4章数组和字符串
4.1数组
4.1.1数组的定义与操作
4.1.2数组的顺序存储结构
4.1.3矩阵的压缩存储方法
4.2字符串
4.2.1字符串的定义与操作
4.2.2字符串的存储结构
4.2.3字符串基本操作的实现
4.2.4字符串的应用举例
4.3C++中的数组和字符串
4.3.1C++中的数组
4.3.2C++中的字符串
习题4
上机练习4
第5章树
5.1树的概念与操作
5.1.1树的概念
5.1.2树的基本操作
5.2二叉树
5.2.1二叉树的概念
5.2.2二叉树的性质
5.2.3二叉树的存储结构及其实现
5.3二叉树的遍历
5.3.1递归的遍历算法
5.3.2二叉树遍历操作应用举例
5.4线索二叉树
5.4.1线索二叉树的定义
5.4.2线索二叉树的常用运算
5.5一般树的表示和遍历
5.5.1一般树的表示
5.5.2二叉树与树、森林之间的转换
5.5.3一般树的遍历
5.6哈夫曼树及其应用
5.6.1哈夫曼树
5.6.2哈夫曼树的应用
5.7C++中的树
5.7.1C++中的二叉树结点类
5.7.2C++中的二叉树类
5.7.3C++中二叉树的非递归遍历
习题5
上机练习5
第6章图
6.1图的概念与操作
6.1.1图的定义
6.1.2图的基本术语
6.2图的存储结构
6.2.1邻接矩阵
6.2.2邻接表
6.2.3十字链表
6.2.4边集数组
6.3图的遍历
6.3.1深度优先搜索
6.3.2广度优先搜索
6.4图的连通性
6.4.1无向图的连通分量
6.4.2生成树和最小代价生成树
6.5有向无环图及应用
6.5.1拓扑排序
6.5.2关键路径
6.6最短路径及应用
6.6.1单源最短路径
6.6.2每对顶点之间的最短路径
6.7C++中的图
6.7.1C++中的图类
6.7.2图的邻接表的C++程序
6.7.3图的遍历的C++程序
6.7.4图的最小生成树的C++程序
习题6
上机练习6
第7章查找
7.1基本概念与术语
7.2静态查找表
7.2.1静态查找表结构
7.2.2顺序查找
7.2.3有序表的折半查找
7.2.4有序表的插值查找和斐波那契查找
7.2.5分块查找
7.3动态查找表
7.3.1二叉排序树
7.3.2平衡二叉树
7.3.3B树和B+树
7.4哈希表查找
7.4.1哈希表与哈希方法
7.4.2常用的哈希方法
7.4.3处理冲突的方法
7.4.4哈希表的查找分析
7.5C++中的查找
7.5.1静态查找的C++程序
7.5.2动态查找的C++程序
习题7
上机练习7
第8章排序
8.1基本概念
8.2插入排序
8.2.1直接插入排序
8.2.2希尔排序
8.3交换排序
8.3.1冒泡排序
8.3.2快速排序
8.4选择排序
8.4.1简单选择排序
8.4.2堆排序
8.5归并排序
*8.6基数排序
*8.7外部排序简介
8.7.1外存信息的存取
8.7.2外部排序的基本方法
8.8C++中的排序
习题8
上机练习8
第9章常用算法设计技术
9.1蛮力算法
9.1.1蛮力算法思想
9.1.2蛮力算法应用实例——最近对问题
9.2分治算法
9.2.1分治算法思想
9.2.2分治算法设计
9.2.3分治算法设计应用实例——棋盘覆盖问题
9.3动态规划算法
9.3.1动态规划算法思想及设计
9.3.2动态规划算法应用实例——0/1背包问题
9.4贪心算法
9.4.1贪心算法技术思想
9.4.2贪心算法设计
9.4.3贪心算法应用实例——背包问题
9.5回溯算法
9.5.1回溯算法有关概念
9.5.2回溯算法思想
9.5.3回溯算法设计
9.5.4回溯算法应用实例——装载问题
9.6分支限界算法
9.6.1分支限界算法思想
9.6.2分支限界算法设计
9.6.3分支限界算法应用实例——任务分配问题
习题9
上机练习9
第10章标准模板库
10.1STL简介
10.1.1容器
10.1.2迭代器
10.1.3算法
10.2STL应用实例
10.2.1双向链表操作的STL实现
10.2.2STL测试程序
习题10
上机练习10
参考文献
算法与数据结构(第三版)是2011年出版的第二版的修订版。第三版在保持原书基本框架和特色的基础上,增加了常用算法设计技术。全书系统介绍了算法与数据结构方面的基本知识,重点阐述了基本数据结构及算法在程序开发中的应用方法,能够帮助读者极大地提高软件开发和设计能力。
主编先后主讲数据结构、算法设计与分析、程序设计基础、计算机组成原理等课程,同时悉心指导课程设计和毕业设计,积极指导学生课外科技活动。在教学中形成了独特的教学风格,教学经验丰富,受到师生好评,在教学质量排名中一直位居前20%;作为重庆理工大学精品课程《数据结构》负责人,对课程建设作了大量工作。
主编始终站在教学、科研一线,积极参加教育教学改革和科学研究,主编出版《算法与数据结构》等教材4部,参编4部;在国内外学术期刊和国际会议上公开发表论文40余篇,其中被EI、ISTP检索7篇;主持并完成“光通讯网络互连技术研究”等省部级科研项目4项,参与20余项;主持并完成“地方高校程序设计系列课程改革研究与实践”、“地方高校专业学位研究生算法设计案例库的建设研究”等教研项目4项;获重庆市自然科学三等奖1项、重庆市教学成果三等奖1项、校优秀教学成果2项;多次获得校“教学工作优秀教师”等奖项。