数据结构是计算机类专业*基础,也是*重要的课程之一,它和程序设计一起为计算学科其他后继课程的学习奠定了基础。 上海交通大学的“数据结构”课程是精品课程和精品资源共享课程,《数据结构:思想与实现(第2版)》是该课程的教学成果之一,被列入“十二五”普通高等教育本科国家级规划教材。 《数据结构:思想与实现(第2版)》条理清晰,严格按照线性结构、树状结构、集合结构和图状结构的次序来组织。除常规的数据结构内容之外,还介绍了一些高级的数据结构,如红黑树、AA树和跳表等,并提供了大量的数据结构应用实例,让读者在学习数据结构的同时,逐步了解为什么要学数据结构以及数据结构对计算机类专业的重要性。 《数据结构:思想与实现(第2版)》内容详实,既注重数据结构和算法的原理,又十分强调和程序设计课程的衔接。在讲授数据结构的同时,不断加强学生对程序设计的理解。书中的算法都有完整的C++实现,这些程序结构清晰,构思精巧,且所有程序都在VC 6.0环境下编译通过,并能正确运行。它们既是学习数据结构和算法的示例,也是学习C++程序设计很好的示例。 为便于读者学习与理解,《数据结构:思想与实现(第2版)》为重点、难点内容提供了教学视频,读者可通过扫描二维码观看。 《数据结构:思想与实现(第2版)》可作为高等学校计算机类专业“数据结构”课程的教材,也可供相关技术人员参考。
数据结构是计算机类专业最基础,也是最重要的课程之一,它和程序设计一起为计算学科其他后继课程的学习奠定了基础。
数据结构和程序设计是关系非常密切的课程。在教学安排中,通常程序设计课程后接着就是数据结构课程。在学习数据结构时,学生往往对程序设计还不是很熟练。通常学生的难点不在于对数据结构的理解,而在于如何用特定的程序设计语言来实现这些数据结构,特别是如何按照面向对象的思想将一个个数据结构设计成一个个类。本书十分强调和程序设计课程的衔接,在讲授数据结构的同时,不断加强学生对程序设计的理解。书中的算法都有完整的C++程序实现,这些程序结构清晰,构思精巧,且都在VC6.0环境下编译通过,并能正确运行。它们既是学习数据结构和算法的示例,也是学习C++程序设计很好的示例。
本书既适用于过程化方法讲授,也适用于面向对象方法讲授。除第1章外,其余各章的结构基本一致。每章介绍一个数据结构,首先介绍该数据结构所处理的逻辑结构及其常用操作。其次介绍该数据结构的各种实现方法,以及如何将其封装成类。接着介绍C++中对应于该数据结构的工具,告诉读者如何应用现有的工具。最后介绍该数据结构的应用,让读者进一步了解数据结构的重要性。
本书共16章,第1章引言介绍什么是数据结构,什么是算法;回顾面向对象的程序设计方法;还介绍了本书的使用方法。第2~16章被分为五大部分:线性结构、树状结构、集合结构、图状结构和算法设计基础。其中,第2~5章为第1部分,主要讨论线性结构,包括线性表、栈、队列与字符串。第6、7章为第2部分,讨论树状结构,包括树和基于树实现的优先级队列。第8-12章为第3部分,讨论集合结构,这一部分是根据集合的查找和排序两个基本操作组织的,包括集合与静态查找表、动态查找表、排序、外部查找与排序,以及基于集合操作的、用于处理等价类的工具——不相交集。第13-15章为第4部分,讨论图状结构,主要包括图的基本概念、基本操作、实现方法、常见应用,以及图中的两个重要的操作——最小生成树和最短路径问题。最后一部分由第16章组成,介绍基本的算法设计方法,主要包括枚举法、贪婪法、分治法、动态规划和随机算法,使读者在遇到一些没有现成算法的问题时知道如何着手解决问题。
本书内容丰富,除介绍常规的数据结构内容之外,还介绍了一些高级的数据结构,如红黑树、AA树、并查集和跳表等,并提供了大量的数据结构应用实例。让读者在学习数据结构的同时,逐步了解学习数据结构课程的目的,以及该课程对计算机类专业的重要性。
本书第1版于2009年出版。在使用过程中编者收到了许多任课教师和学生的反馈信息,对本书提出了一些意见和建议。第2版就以下几点做了较大的修改。
(1)进一步理顺框架。
(2)从初学者的角度出发,尽量讲得通俗,突出基础,突出重点。
(3)增加重点、难点的教学视频。读者可通过扫描二维码的方式进行在线学习。
相信修改以后的第2版会更加符合读者的需求。但因作者水平有限,书中肯定还会存在很多不足之处,敬请读者批评指正。
翁惠玉,博士,上海交通大学计算机系教授,从事计算机网络和信息系统的研究,并长期承担“程序设计”和“数据结构”课程的教学工作。主讲上海交通大学致远学院计算机科学班和电子信息与电气工程学院大平台的“程序设计”和“数据结构”课程。其中,“数据结构”课程于2008年被评为国家精品课程,2012年评为国家精品资源共享课程。主编《C++程序设计思想与方法》《C++程序设计题解与拓展》《深入浅出数据结构》《数据结构题解与拓展》等多本教材。
俞勇,上海交通大学教授,博士生导师。国家精品课程“数据结构”及上海市“程序设计类基础课程教学团队”主持人,主编教材或著作8部。先后主持教育部教育教学改革项目2项,获国家和上海市教学成果奖9项、上海市教材奖2项。曾带领学生在ACM国际大学生程序设计竞赛中3次获得世界总冠军,获杰出教练奖。从事信息检索、语义Web、机器学习等领域的研究,曾主持国家自然科学基金、863项目10余项,并在各种学术期刊、会议上发表学术论文近300篇,译著3册。
曾获国务院特殊津贴、全国模范教师、全国师德标兵、宝钢教师特等奖、上海市五一劳动奖章、上海市教学名师、上海市模范教师、上海交通大学校长奖和*受学生欢迎教师等荣誉。
第1章 引言
1.1 算法与数据结构
1.1.1 数据的逻辑结构
1.1.2 数据结构的运算
1.2 存储实现
1.3 算法分析
1.3.1 时间复杂度的概念
1.3.2 算法运算量的计算
1.3.3 渐进时间复杂度
1.3.4 时间复杂度的计算
1.3.5 算法的优化
13.6 空间复杂度
1.4 面向对象方法
本书的结构和特点
总结
练习1
第1部分 线性结构
第2章 线性表
2.1 线性表的定义
2.2 线性表的顺序实现
2.2.1 顺序表的存储实现
2.2.2 顺序表的运算实现
2.2.3 顺序实现的性能分析
2.2.4 顺序表的简单示例
2.3 线性表的链接实现
2.3.1 单链表
2.3.2 双链表
2.3.3 循环链表
2.3.4 链表的性能分析
2.4 标准模板库(STL)中的线性表
2.4.1 容器和迭代器的概念
2.4.2 STL中的线性表类
2.5 线性表的应用
2.5.1 大整数处理
2.5.2 多项式求和
2.5.3 约瑟夫环
2.5.4 动态内存管理
总结
练习2
第3章 栈
3.1 栈的定义
3.2 栈的顺序实现
3.2.1 顺序栈的存储实现
3.2.2 顺序栈的运算实现
3.2.3 顺序栈性能分析
3.2.4 顺序栈的简单示例
3.3 栈的链接实现
3.3.1 链接栈的存储实现
3.3.2 链接栈的运算实现
3.3.3 链接栈的简单示例
3.4 STL中的栈
3.5 栈的应用
3.5.1 递归消除
3.5.2 括号配对
3.5.3 简单的计算器
总结
……
第2部分 树状结构
第3部分 集合结构
第4部分 图状结构
第5部分 算法设计基础
《数据结构:思想与实现(第2版)》:
提高外存储器中查找表的查找效率,最直接的方法就是减少磁盘访问的次数。在查找树中,访问的次数与查找树的高度成正比。在外存储器中,每次访问对应了一次磁盘访问。因此,要减少磁盘访问的次数必须降低查找树的高度。解决方法非常简单,只要树的分支多一些,高度就能降下来。比如,一棵31个结点的完全二叉树有5层,而一棵31个结点5叉树只有3层。一棵M叉树允许有M路分支,随着分支数量的增加,树的高度就会降低。因为一棵完全二叉树的高度大约为log2N,而一棵完全M叉树的高度约为logMN。
构造M叉查找树的方法和构造二叉查找树的方法很相似。在二叉查找树中,每个结点保存一个键值来决定到左子树还是右子树中继续操作,在M叉查找树中每个结点需要保存M-1个键来判断到哪个分支中继续操作。为了保证这个策略在最坏的情况下也很有效,必须采取一些手段保证M叉查找树的平衡。否则,像二叉树一样,它也可能会退化成一个链表。
……