《数据结构(第2版)》介绍了各种常用的数据结构及其操作,包括线性表、栈和队列、串、数组、树、图、查找和排序等。全书使用标准的C语言作为算法描述工具。《数据结构(第2版)》内容通俗易懂,侧重于应用,力求内容与应用实例相结合,并附有上机实验和实训指导,有利于提高读者分析问题和解决问题的能力。 《数据结构(第2版)》可以作为高职高专院校计算机相关专业的教材,也可以作为专升本、自学考试的辅导教材。
本书内容通俗易懂,侧重于应用,力求内容与应用实例相结合,并附有上机实验和实训指导,有利于提高读者分析问题和解决问题的能力。
前言
第1章 概论
1.1 基本概念和术语
1.1.1 逻辑结构
1.1.2 存储结构
1.2 算法的描述与分析
1.2.1 算法描述
1.2.2 算法分析
1.2.3 时间复杂度
1.2.4 空间复杂度
本章小结
习题
第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.4 单向循环链表
2.5 双向循环链表
2.5.1 双向链表
2.5.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 队列的应用
本章小结
习题
第4章 串
4.1 串及其运算
4.1.1 串的基本概念
4.1.2 串的基本运算
4.2 串的存储结构
4.2.1 串的顺序存储
4.2.2 串的链式存储
4.3 串运算的实现
4.4 串的模式匹配运算
4.4.1 有回溯的模式匹配算法(BF算法)
4.4.2 无回溯的模式匹配算法(KMP算法)
本章小结
习题
第5章 数组和广义表
5.1 数组
5.1.1 数组的定义
5.1.2 数组的顺序存储
5.2 矩阵的压缩存储
5.2.1 特殊矩阵
5.2.2 稀疏矩阵
5.3 广义表
5.3.1 广义表的定义与运算
5.3.2 广义表的存储
本章小结
习题
第6章 树
6.1 树的概念
6.1.1 树的定义
6.1.2 树的基本术语
6.1.3 树的基本操作
6.2 二叉树
6.2.1 二叉树的定义
6.2.2 二叉树的性质
6.2.3 二叉树的存储结构
6.3 遍历二叉树
6.3.1 二叉树遍历方法
6.3.2 二叉树遍历的递归算法
6.3.3 二叉树遍历的非递归算法
6.4 二叉树的递归编程应用
6.5 线索二叉树
6.5.1 线索二叉树的概念及存储
6.5.2 有关线索二叉树的算法
6.6 树和森林
6.6.1 树的存储结构
6.6.2 树、森林和二叉树的转换
6.7 哈夫曼树及哈夫曼编码
本章小结
习题
第7章 图
7.1 图的基本概念
7.1.1 图的定义
7.1.2 图的基本术语
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.5 最短路径
7.5.1 单源点最短路径
7.5.2 所有顶点对之间的最短路径
7.6 拓扑排序
7.6.1 顶点活动网
7.6.2 拓扑排序
本章小结
习题
第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.6.1 排序方法的比较
8.6.2 排序方法的选择山
本章小结
习题
第9章 查找
9.1 基本概念
9.2 线性表的查找
9.2.1 顺序查找
9.2.2 二分查找
9.2.3 分块查找
9.3 树上的查找
9.4 散列查找
9.4.1 基本概念
9.4.2 散列函数的构造方法
9.4.3 冲突处理方法
9.4.4 散列查找及分析
本章小结
附录
参考文献
图是一种网状数据结构,属于多对多的非线性结构,图中的每个结点可以有多个直接前趋和直接后继。图的存储包括存储图中顶点的信息和边的信息两个方面。这两个部分既可以分开单独存储,也可以用结构体形式一起存储。图的存储结构有邻接矩阵、邻接表等。
图的遍历包含深度优先搜索遍历和广度优先搜索遍历。对于用邻接矩阵结构存储的图,从某个给定的顶点出发的图的遍历得到的访问顶点次序是唯一的,而对于邻接表结构存储的图从某个给定的顶点出发的图的遍历得到的访问顶点次序随建立邻接表的不同而可能不同。
一个连通图的生成树含有该图的全部n个顶点和其中n-1条边(不构成回路),其中权值之和最小的生成树称为最小生成树。求最小生成树有两种不同的方法,一种是普里姆算法;另一种是克鲁斯卡尔算法。如果所采用的方法不同,得到的最小生成树中边的次序也可能不同,但最小生成树的权值之和相同。
求图的最短路径有两种算法,其一是单源点的最短路径,用迪杰斯特拉算法来实现;其二是所有顶点对的最短路径,用弗洛伊德算法来实现。