数据结构教程
2009-2
电子工业出版社
吉根林,陈波 主编
231
“数据结构”是计算机科学与技术、软件工程、信息与计算科学、信息管理与信息系统等相关专业最重要的专业基础课之一,主要研究分析计算机存储、组织数据的方式和相关操作运算算法。通过本课程学习,要求学生掌握数据结构和算法的基本概念和技术,掌握数组、线性表、栈、队列、串、广义表、树、二叉树、图等常用数据结构及相关算法,以及排序、查找等重要技术,能针对应用问题选择合适的数据结构,并设计相应的操作运算算法。 南京师范大学“数据结构”课程经过多年建设与探索,进行了教学内容与教学方法的改革与实践,提高了教学质量,被评为江苏省精品课程。我们在教学中贯彻了下列指导思想: (1)基础性。数据结构、算法和程序设计是计算机科学的核心,本课程应为学生的软件开发能力的培养打下扎实的基础。 (2)系统性。本课程以系统的观点研究数据组织和操作算法,必须在抽象思维、算法设计等方面加强学生的能力培养。 (3)先进性。本课程的新思想和新方法不断产生,必须不断更新教学内容以拓宽学生的知识面,适应计算机应用和发展的需要。 (4)实践性。本课程是一门实践性很强的课程,在“数据结构”的课程实验中不仅要训练学生的计算机实验技能和操作能力,更应包括设计算法的创造性实验能力。 本教材在编写过程中集作者多年“数据结构”精品课程的教学经验,体现科学性、先进性和实用性原则,既注重基本原理,又重视算法实现;力求内容丰富,重点突出,条理清晰,由浅入深,语言流畅,具有特色。全书使用C++类定义各种数据结构,利用C++伪代码描述算法;给出许多经典算法和典型题例;每章均附有小结、习题和上机实验题;附录给出了5套课程考试样卷和5道课程设计题,以供教学参考。 本教材共分10章。 第1章简要介绍数据结构和算法的基本概念; 第2-5章介绍线性结构及其算法,包括线性表、栈、队列、串、数组和特殊矩阵; 第6-8章介绍非线性结构及其算法,包括广义表、树、二叉树、图; 第9章介绍各种常用的查找算法; 第10章介绍各种常用的排序算法。 本教材由南京师范大学“数据结构”课程组共同编写。其中,第1章和第10章由吉根林教授编写;第2章和第3章由陈波副教授编写;第6章和第7章由王琼副教授编写;第5章和第8章由周俊生副教授编写;第4章和第9章由于泠副教授编写。全书由吉根林和陈波担任主编,并最后统稿、修改和定稿。本书出版过程中得到了电子工业出版社的大力支持,在此表示衷心的感谢! 由于作者水平有限,书中难免存在不妥之处,敬请读者批评指正。
本书是省精品课程的教学成果,全书共分10章,介绍各种常用的数据结构,包括线性表、栈、队列、串、数组、特殊矩阵、广义表、树、二叉树、图等;阐述各种数据结构的基本概念、逻辑关系、存储结构、操作运算及其实现算法;介绍各种常用的查找算法和排序算法,并对各种算法的性能进行分析。书中使用C++类定义各种数据结构,利用C++伪代码描述算法;给出了许多经典算法和典型题例;每章均附有小结、习题和上机实验题;附录给出了5套课程考试样卷和5道课程设计题。 本书既注重基本原理,又重视算法实现;既体现先进性,又强调实用性;内容丰富,重点突出,条理清晰,由浅入深。本书的PPT课件和相关教学资源可从江苏省精品课程和南京师范大学精品课程“数据结构”网站http://mcs.njnu.edu.cn/datastructure/index.asp下载。 本书可作为高等学校计算机、软件工程、信息与计算科学、信息管理与信息系统等专业教材,也可供计算机软件开发人员参考。
第1章 绪论 1.1 数据结构课程的研究内容 1.2 基本概念及术语 1.3 算法与算法分析 1.3.1 算法 1.3.2 算法分析 本章小结 习题1 上机实验题1第2章 线性表 2.1 线性表的基本概念 2.2 线性表的存储结构 2.2.1 顺序存储结构 2.2.2 链式存储结构 2.3 线性表的操作算法 2.3.1 顺序表的操作算法 2.3.2 链表的操作算法 2.4 线性表的应用 2.5 顺序表和链表的综合比较 本章小结 习题2 上机实验题2第3章 栈和队列 3.1 栈 3.1.1 栈的基本概念 3.1.2 栈的存储结构 3.1.3 栈的操作算法 3.1.4 栈的应用 3.2 队列 3.2.1 队列的基本概念 3.2.2 队列的存储结构 3.2.3 队列的操作算法 3.2.4 队列的应用 本章小结 习题3 上机实验题3第4章 串 4.1 串的基本概念 4.2 串的存储结构 4.2.1 串的顺序存储结构 4.2.2 串的链式存储结构 4.3 串的操作算法 4.3.1 串的基本操作算法 4.3.2 串的模式匹配 4.3.3 串的应用——文本编辑软件 本章小结 习题4 上机实验题4第5章 数组和特殊矩阵 5.1 数组 5.1.1 数组的基本概念 5.1.2 数组的存储结构 5.2 特殊矩阵的压缩存储 5.2.1 对称矩阵的压缩存储 5.2.2 三角矩阵的压缩存储 5.2.3 对角矩阵的压缩存储 5.2.4 稀疏矩阵的压缩存储 本章小结 习题5 上机实验题5第6章 广义表 6.1 广义表的基本概念 6.2 广义表的存储结构 6.2.1 广义表中结点的结构 6.2.2 广义表的存储结构举例 6.3 广义表的操作算法 6.3.1 构造算法 6.3.2 遍历广义表 6.3.3 广义表算法举例 本章小结 习题6 上机实验题6第7章 树和二叉树 7.1 树的概念和性质 7.1.1 树的定义 7.1.2 树的基本术语 7.1.3 树的基本性质 7.2 二叉树的概念和性质 7.2.1 二叉树的定义 7.2.2 二叉树的基本性质 7.3 二叉树的存储结构 7.3.1 二叉树的顺序存储结构 7.3.2 二叉树的链式存储结构 7.4 二叉树的遍历 7.4.1 二叉树遍历的概念 7.4.2 二叉树遍历算法 7.4.3 二叉树的构造和析构算法 7.5 二叉树的其他操作算法 7.6 线索二叉树 7.6.1 线索二叉树的概念 7.6.2 线索二叉树的存储结构 7.6.3 线索二叉树的操作算法 7.7 树的存储结构与算法 7.7.1 树的存储结构 7.7.2 树的操作算法 7.8 HUFFMAN树与HUFFMAN编码 7.8.1 Huffman树的定义 7.8.2 Huffman树的构造 7.8.3 Huffman编码与译码 7.8.4 Huffman树的其他应用——程序设计流程优化 7.9 树与等价类 7.9.1 等价类问题 7.9.2 等价类的实现 7.9.3 性能分析与改进 本章小结 习题7 上机实验题7第8章 图 8.1 图的基本概念 8.1.1 图的定义 8.1.2 图的基本术语 8.2 图的存储结构 8.2.1 邻接矩阵表示法 8.2.2 邻接表表示法 8.3 图的遍历 8.3.1 图的遍历的概念 8.3.2 深度优先搜索 8.3.3 广度优先搜索 8.3.4 图的遍历算法的应用 8.4 最小生成树 8.4.1 最小生成树的概念及其性质 8.4.2 Prim算法 8.4.3 Kruskal算法 8.5 最短路径 8.5.1 最短路径的概念 8.5.2 单源最短路径 8.5.3 每对顶点之间的最短路径 8.6 AOV网与拓扑排序 8.6.1 有向无环图与AOV网的概念 8.6.2 拓扑排序 8.7 AOE网与关键路径 8.7.1 AOE网的概念 8.7.2 关键路径 本章小结 习题8 上机实验题8第9章 查找 9.1 查找的基本概念 9.2 顺序表的查找 9.2.1 顺序查找 9.2.2 折半查找 9.2.3 分块查找 9.3 树表的查找 9.3.1 二叉排序树 9.3.2 平衡二叉树 9.3.3 B树 9.3.4 B+树 9.4 HASH查找 9.4.1 Hash查找的基本概念 9.4.2 Hash表的构造 9.4.3 Hash查找算法及分析 本章小结 习题9 上机实验题9第10章 排序 10.1 排序的基本概念 10.2 冒泡排序 10.3 选择排序 10.4 插入排序 10.4.1 直接插入排序 10.4.2 折半插入排序 10.5 希尔排序 10.6 快速排序 10.7 堆排序 10.8 归并排序 10.8.1 二路归并排序的非递归实现 10.8.2 二路归并排序的递归实现 10.9 基数排序 10.9.1 多关键字排序 10.9.2 链式基数排序 本章小结 习题10 上机实验题10附录A 数据结构试题附录B 数据结构课程设计题参考文献
第1章 绪论 “数据结构”是计算机科学与技术、软件工程、信息安全、信息管理与信息系统、信息与计算科学等专业的一门十分重要的专业核心基础课程,主要学习计算机中数据的组织方式、存储结构和处理方法。数据结构课程的学习将为计算机及相关专业的后续课程(如操作系统、编译原理、数据库原理、软件工程等)的学习打下基础。实际上,要编写一个“好”的程序,无非是要选择一个合理的数据结构和好的算法,而“好”算法的选择很大程度上取决于描述实际问题所采用的数据结构,因此要编写出“好”的程序,仅仅学习程序设计语言是不够的,必须很好地掌握数据结构的基本知识和基本技能。本章将概要地介绍数据结构课程的研究内容、基本概念和基本思想。 1.1 数据结构课程的研究内容。 数据结构起源于程序设计,随着计算机科学技术的发展,计算机应用领域不再局限于科学计算,而更多地应用于信息处理、智能控制、办公自动化等领域。计算机处理的对象由数值发展到字符串、表格、图形、图像、声音等数据,而且处理的数据量也越来越大。在程序设计中面对这样的数据,我们应如何来组织和处理它们呢?这就是“数据结构”课程需要研究的问题。 计算机解决问题时,一般要经过几个步骤:首先,要将实际问题抽象出数学模型,然后针对数学模型设计出求解算法,最后编写程序上机调试,直到求出最终结果。数值计算问题的数学模型一般可由数学方程或数学公式来描述。然而,对于非数值计算问题,例如图书资料的检索、人一机博弈、课程表编排、最短路径求解等问题,它们的数学模型无法用数学方程或数学公式来描述,而是要用线性表、树、图等数据结构来描述,并且要对这些模型设计相应算法来求解。数据结构就是研究计算机非数值计算问题中的数据对象以及它们之间的关系和操作算法的学科,具体主要包含三个方面的内容:①数据的逻辑结构;②数据的存储结构;③数据的操作算法。
本教材在编写过程中集作者多年“数据结构”精品课程的教学经验,体现科学性、先进性和实用性原则,既注重基本原理,又重视算法实现;力求内容丰富,重点突出,条理清晰,由浅入深,语言流畅,具有特色。全书使用C++类定义各种数据结构,利用C++伪代码描述算法;给出许多经典算法和典型题例;每章均附有小结、习题和上机实验题;附录给出了5套课程考试样卷和5道课程设计题,以供教学参考。 本教材共分10章。第1章简要介绍数据结构和算法的基本概念;第2~5章介绍线性结构及其算法,包括线性表、栈、队列、串、数组和特殊矩阵;第6~8章介绍非线性结构及其算法,包括广义表、树、二叉树、图;第9章介绍各种常用的查找算法;第10章介绍各种常用的排序算法。 本套教材在国家规划教材的基础上,进行全面更新,以适应高校课程与教学改革的需要,并特别注意教材的可读性和可用性,为任课教师提供各种教学服务。
很好的一本书,内容很满意。。。。。。