本书包括数据结构和算法设计方法两部分内容。数据结构部分重点介绍计算机程序设计中所涉及的表、栈、队列、树、图等基本数据对象的面向对象抽象与实现;算法设计方法部分介绍基本的算法设计策略与方法,包括逐步求精法、穷举法、迭代法、递推法、递归法、分治法、回溯法、分支限界法、动态规划法、贪心法等。
本书的数据结构部分将数据抽象与面向对象化作为重点,是对传统的“数据结构”课程的更新与扩充,以抽象观点和类库观点,对基本数据结构赋予新的内涵、新的处理方式,使其上升为面向对象数据结构,这与目前用C++描述数据结构的教材不同。
本书内容丰富,涵盖了“数据结构与算法”课程的国内外最新教学大纲--ACM和IEEE/CSCC2001和《中国计算机科学与技术学科教程2002))规定内容,并形成鲜明的特色,适合作为计算机专业本科生或非计算机专业的研究生的“数据结构与算法”教材,也可供软件设计师和程序员用作继续学习面向对象程序设计的教材。
第1章 概述
1.1 数据结构的兴起与发展
1.2 数据结构的研究对象
1.3 数据结构的概念
1.4 数据结构的图示
1.5 数据结构的分类
1.6 数据结构的存储
1.7 数据结构的访问接口
1.8 面向对象方法
1.9 面向对象与数据结构
本章小结
习题
第2章 程序设计基本策略与方法
2.1 算法
2.2 穷举法
2.3 递椎法与迭代法
2.4 递归法
2.5 逐步求精法
2.6 分治法
本章小结
习题
第3章 线性表
3.1 线性表的逻辑结构
3.2 线性表的顺序存储结构
3.3 异常处理与下标选择器
3.4 线性表的链式存储—线性链表
3.5 几种特殊线性链表
3.6 线性表应用示例
本章小结
习题
第4章 特殊线性表—栈、队列、串
4.1 栈
4.2 队列
4.3 串
本章小结
习题
第5章 数组与十字链表
5.1 数组
5.2 特殊数组
5.3 稀疏矩阵
5.4 十字链表
本章小结
习题
第6章 树形结构
6.1 树形结构的基本概念
6.2 二叉树
6.3 二叉树的存储结构
6.4 二叉树对象模型
6.5 二叉树的遍历操作
6.6 二叉树的解析表示与存储结构之间的转化
6.7 二叉树的线索化
6.8 树与森林
6.9 树对象模型
6.10 树的应用示例—哈夫曼树
本章小结
习题
第7章 图结构
7.1 图的基本概念
7.2 图的对象抽象模型
7.3 图的存储结构
7.4 图的遍历
7.5 拓扑排序
7.6 AOE网与关键路径
本章小结
习题
第8章 广义表
8.1 广义表的逻辑结构
8.2 广义表的存储结构
8.3 广义表对象模型
8.4 广义表的分支单链表对象
8.5 广义表操作的实现
8.6 广义表结构的应用
本章小结
习题
第9章 检索结构
9.1 概述
9.2 线性结构的检索
9.3 线性索引结构
9.4 树形索引结构与二叉排序树
9.5 平衡二叉排序树
9.6 B树
9.7 散列结构
本章小结
习题
第10章 外存与文件组织
10.1 外存结构
10.2 文件
10.3 顺序文件
10.4 索引文件
10.5 ISAM
10.6 VSAM
10.7 散列方式
10.8 多索引文件
本章小结
习题
第11章 排序算法
11.1 概述
11.2 插入排序
11.3 交换排序
11.4 选择排序
11.5 归并排序
11.6 外排序简介
本章小结
习题
第12章 算法设计基本方法
12.1 回溯法与限界剪枝法
12.2 动态规划法
12.3 贪心法
本章小结
习题
词汇索引
参考文献
本书内容分两部分:数据结构(第1章,第3章至第10章)和算法设计方法(第2章、第11章至第12章)。本书形式上仍然以传统数据结构的主要内容为主线,但在内容上对传统的“数据结构”课程进行更新与扩充,对基本数据结构赋予新的内涵、新的处理方式,使其上升为面向对象数据结构。本教材的数据结构部分与目前国内外用C++描述数据结构的教材不同,有下列主要特色。
基本目的方面
.使学生掌握基本程序设计中所需的基本数据设置方法,即以数据为中心的程序设计技术。
.使学生建立程序设计模块化、抽象化的思想,掌握相关技术。
.使学生进一步建立面向对象思想,掌握其方法,并将其融人数据结构的处理中。
.培养计算机专业学生建立现代软件开发中广为使用的类库的基本能力。
基本特征方面
.对象观点。将传统数据结构中的每种逻辑结构中的各种成分都视为基本对象,给出它们的抽象访问接口、存储方式及对象实现。面向对象技术实质上是数据结构概念的自然扩展与继续,对象包含数据结构中的主要因素——数据成分与操作。因此,数据结构的“面向对象化”是必然的发展趋势。
.类库观点。类库是面向对象的产物,它的出现,使软件IC成为现实。目前世界上流行的二次开发工具/系统/支撑环境,大多是以类库形式出现的。因此,类库的创建,是计算机专业学生所必须掌握的技术。本教材从基本讲起,以传统的数据结构为蓝本,将各种逻辑结构整体分别视为类库,依次讲述其对象描述、抽象接口设置、对象实现。
.面向对象技术。本教材在以基本数据结构为对象介绍类库的构造的同时,还介绍了面向对象程序设计中的多方面的基本技术,如异常处理、可变类型处理、继承设计等,是面向对象程序设计课程的重要补充与发展。
本书的算法设计部分则抛开了面向对象思想,将重点放到了问题的解决过程的思路和方法上,力求清晰、严密地归纳各种基本的算法设计策略和方法及其应用,并给出严密的数学推导和证明。
本书主要面向“数据结构与算法”课程,是根据最新教学大纲与国内外最新教材动向,结合作者自己的教学研究成果编写而成。该课程是计算机类专业的专业基础课,为必修课中的主干课。学习本课程,需要具备高级语言程序设计的基础和C++基础。如果没有学过C++,教师可在讲授前,用2~4个学时简要介绍C++中类和对象的概念和定义方法,而对于C++中其他问题,可在讲授正文中穿插介绍。本书内容较多,全部讲授至少需要72学时。如果学时不够,建议略去带“*”的部分。
本教材使用的C++编译器是C++ Builder 6.0中自带的C++编译器(非Windows环境,即Console环境)。
北京大学李晓明教授、北京工业大学蒋宗礼教授认真审阅了全书,并提出了许多宝贵意见。华南理工大学李仲麟教授、肖南峰教授、张齐副教授、陈俊风副教授以及张见威、李缨、杨清洪等老师,都对本书的编写给予了大力支持和帮助。值此出版之际,作者一并表示衷心感谢!
限于水平与时间,书稿虽几经修改,仍难免存在缺点或错误,恳请广大读者惠予批评指正。