本书在前两版的基础上,针对教育部新的考研大纲和大量读者来信提出的要求进行了修订。本书内容包括绪论、线性表、栈和队列、串、数组和广义表、递归、树形结构、图、查找、内排序、外排序和文件,还给出了3个综合实验题、实验报告格式、引用型参数的说明、顺序表和顺序栈以及顺序队列使用指针引用型参数的说明、书中部分算法清单、2009年全国计算机专业数据结构考研大纲。
本书适合高等院校计算机及相关专业本科生及研究生使用。
数据结构是计算机学科的必修课程,涵盖了计算机学科的算法设计、数值分析、操作系统和编译原理等课程涉及的大部分相关算法的实现。学好该课程不仅对这些后续课程的学习有很大帮助,而且在实际中有广泛的用途。
计算机是进行数据处理的工具,数据结构主要研究数据的各种组织形式以及建立在这些结构之上的各种运算算法的实现,它不仅为用计算机语言进行程序设计提供了方法性的理论指导,还在更高的层次上总结了程序设计的常用方法和常用技巧。
本教程是作者针对数据结构课程概念多、算法灵活和抽象性强等特点,在总结长期教学经验的基础上编写的。全书分为13章和6个附录,第1章为绪论,介绍数据结构的基本概念,特别强调算法分析的方法; 第2章为线性表,介绍线性表的两种存储结构——顺序表和链表与基本运算算法的实现过程; 第3章为栈和队列,介绍这两种特殊线性结构的概念与应用; 第4章为串,介绍串的概念与模式匹配算法; 第5章为数组和广义表,介绍数组、稀疏矩阵和广义表的概念与相关运算算法的实现过程; 第6章为递归,较深入地讨论了计算机学科中递归算法设计方法; 第7章为树形结构,介绍树和二叉树的概念与各种运算算法的实现过程,其中特别突出二叉树的各种递归算法方法; 第8章为图,介绍图的概念和图的各种运算算法的实现过程; 第9章为查找,介绍各种查找算法的实现过程; 第10章为内排序,介绍各种内排序算法的实现过程; 第11章为外排序,介绍各种外排序算法的实现过程; 第12章为文件,介绍各类文件的组织结构; 第13章为采用面向对象方法描述算法,介绍面向对象的概念和用C++描述数据结构算法的方法。附录A给出了3个综合实验题; 附录B给出了实验报告格式; 附录C是引用型参数的说明; 附录D是顺序表、顺序栈和顺序队列的算法中使用指针引用型参数的说明; 附录E给出了书中部分算法清单; 附录G为教育部颁发的2009年全国计算机专业数据结构部分考研大纲。
数据结构是一门应用性非常强的课程,学生在掌握各种数据结构特别是存储结构的基础上,一定要尽可能多地上机实习,通过较多的实验把难以理解的抽象概念转化为实实在在的计算机能够正确运行的程序,这样才能将所学知识和实际应用结合起来,吸取算法的设计思想和精髓,提高运用这些知识解决实际问题的能力。因此,本教程突出上机实习内容,除最后一章外其余各章都给出大量的上机实验题(属验证设计型实验),供教师和学生选用,附录A还给出3个综合性较强的实验题(属综合设计型实验),目的是全面考查学生综合运用数据结构知识的能力,一般在本课程学习末期或者在专门的数据结构集中实习课(通常为36课时)中向学生布置。
为了便于学习和上机实验,我们还编写了与本教程配套的《数据结构教程学习指导》和《数据结构教程上机实验指导》两本书,构成一个完整的教学系列。本系列中所有程序均在Visual C++ 6.0环境下调试通过。
本教程和相关学习指导的编写得到武汉大学教务部“数据结构综合教学改革”教学项目的支持,是本群组许多教师多年来在数据结构课程教学研究和教学改革中的经验与成果的结晶,特别得到黄传河、黄竟伟、黄水松、薛超英等多位教授和博导的大力帮助。作者在此表示衷心感谢。
本书在前两版的基础上,针对教育部颁发的新的考研大纲和大量读者来信提出的要求进行了修订,例如,广义表在新考纲中没有出现,将其合并到数组部分,同时对全书中多个算法进行了优化。另外,编者在VC++ 6.0环境中实现了书中各数据结构的基本运算算法和算法设计例题,这些源程序和本书的课件可以免费从http://www.tup.com.cn网站下载。
由于水平所限,可能存在错误和不足之处,敬请读者批评指正,特别希望使用本书的教师与作者探讨,共同提高我国计算机专业数据结构课程的教学水平。作者的联系信箱为licb1964@126.com。
编者
2008年10月
第1章绪论
1.1什么是数据结构
1.1.1数据结构的定义
1.1.2逻辑结构类型
1.1.3存储结构类型
1.1.4数据结构和数据类型
1.2算法及其描述
1.2.1什么是算法
1.2.2算法描述
1.3算法分析
1.3.1算法设计的目标
1.3.2算法效率分析
1.3.3算法存储空间分析
1.4数据结构+算法=程序
本章小结
练习题1
上机实验题1
第2章线性表
2.1线性表及其逻辑结构
2.1.1线性表的定义
2.1.2线性表的抽象数据类型描述
2.2线性表的顺序存储结构
2.2.1线性表的顺序存储结构——顺序表
2.2.2顺序表基本运算的实现
2.3线性表的链式存储结构
2.3.1线性表的链式存储结构——链表
2.3.2单链表基本运算的实现
2.3.3双链表
2.3.4循环链表
2.4线性表的应用
2.5有序表
本章小结
练习题2
上机实验题2
目录
数
据结构教程(第3版)
第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.1BruteForce算法
4.3.2KMP算法
本章小结
练习题4
上机实验题4
第5章数组和广义表
5.1数组
5.1.1数组的基本概念
5.1.2数组的存储结构
5.1.3特殊矩阵的压缩存储
5.2稀疏矩阵
5.2.1稀疏矩阵的三元组表示
5.2.2稀疏矩阵的十字链表表示
5.3广义表
5.3.1广义表的定义
5.3.2广义表的存储结构
5.3.3广义表的运算
本章小结
练习题5
上机实验题5
第6章递归
6.1什么是递归
6.1.1递归的定义
6.1.2何时使用递归
6.1.3递归模型
6.1.4递归与数学归纳法
6.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.1.4树的性质
7.1.5树的基本运算
7.1.6树的存储结构
7.2二叉树的概念和性质
7.2.1二叉树的概念
7.2.2二叉树的性质
7.2.3二叉树与树、森林之间的转换
7.3二叉树存储结构
7.3.1二叉树的顺序存储结构
7.3.2二叉树的链式存储结构
7.4二叉树的基本运算及其实现
7.4.1二叉树的基本运算概述
7.4.2二叉树的基本运算算法实现
7.5二叉树的遍历
7.5.1二叉树遍历的概念
7.5.2二叉树遍历递归算法
7.5.3二叉树遍历非递归算法
7.5.4层次遍历算法
7.6二叉树的构造
7.7线索二叉树
7.7.1线索二叉树的概念
7.7.2线索化二叉树
7.7.3遍历线索化二叉树
7.8哈夫曼树
7.8.1哈夫曼树概述
7.8.2哈夫曼树的构造算法
7.8.3哈夫曼编码
7.9用并查集求解等价问题
7.9.1什么叫并查集
7.9.2并查集的算法实现
本章小结
练习题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.3.5图遍历算法的应用
8.4生成树和最小生成树
8.4.1生成树的概念
8.4.2无向图的连通分量和生成树
8.4.3普里姆算法
8.4.4克鲁斯卡尔算法
8.5最短路径
8.5.1路径的概念
8.5.2从一个顶点到其余各顶点的最短路径
8.5.3每对顶点之间的最短路径
8.6拓扑排序
8.7AOE网与关键路径
本章小结
练习题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.3B-树
9.3.4B+树
9.4哈希表查找
9.4.1哈希表的基本概念
9.4.2哈希函数构造方法
9.4.3哈希冲突解决方法
9.4.4哈希表上的运算
本章小结
练习题9
上机实验题9
第10章内排序
10.1排序的基本概念
10.2插入排序
10.2.1直接插入排序
10.2.2二分插入排序
10.2.3希尔排序
10.3交换排序
10.3.1冒泡排序
10.3.2快速排序
10.4选择排序
10.4.1直接选择排序
10.4.2堆排序
10.5归并排序
10.6基数排序
10.7各种内排序方法的比较和选择
本章小结
练习题10
上机实验题10
第11章外排序
11.1外排序概述
11.2磁盘排序
11.2.1磁盘排序过程
11.2.2多路平衡归并
11.2.3初始归并段的生成
11.2.4最佳归并树
11.3磁带排序
11.3.1多路平衡归并排序
11.3.2多阶段归并排序
本章小结
练习题11
上机实验题11
第12章文件
12.1文件的基本概念
12.1.1什么是文件
12.1.2文件的逻辑结构及操作
12.1.3文件的存储结构
12.2顺序文件
12.3索引文件
12.3.1ISAM文件
12.3.2VSAM文件
12.4哈希文件
12.5多关键字文件
12.5.1多重表文件
12.5.2倒排文件
本章小结
练习题12
上机实验题12
第13章采用面向对象的方法描述算法
13.1面向对象的概念
13.1.1重要概念
13.1.2主要优点
13.2用C++描述面向对象的程序
13.2.1类
13.2.2类对象
13.2.3构造函数和析构函数
13.2.4派生类
13.3用C++描述数据结构算法
13.3.1顺序表类
13.3.2链栈类
13.3.3二叉树类
附录A综合实验题
附录B实验报告格式
附录C引用型参数的说明
附录D顺序表、顺序栈和顺序队列使用指针引用型参数的说明
附录E书中部分算法清单
附录F全国计算机专业数据结构考研大纲
参考文献