第1章 概论 1
1.1 数据结构的基本概念和术语 1
前言 1
1.2 算法描述与分析 2
1.2.1 算法 2
1.2.2 算法分析 3
复习思考题 4
2.1.1 线性表的定义 5
2.1.2 线性表的运算 5
2.1 线性表的定义和运算 5
第2章 线性表 5
2.2 线性表的顺序存储结构 6
2.2.1 线性表的顺序存储结构 6
2.2.2 顺序表的运算 7
2.3 线性表的链式存储结构 8
2.3.1 线性链表 8
2.3.2 单链表的基本运算 10
2.4 循环链表 13
2.5 双向链表 14
2.6 线性表的应用--多项式相加 16
实习题 18
复习思考题 18
第3章 栈和队列 19
3.1 栈 19
3.1.1 栈的定义及其运算 19
3.1.2 顺序栈--栈的顺序存储结构 20
3.1.3 链栈--栈的链式存储结构 22
3.1.4 栈的应用举例 23
3.2 队列 26
3.2.1 队列的定义及运算 26
3.2.2 队列的存储结构及基本运算的实现 27
3.2.3 队列的应用简介 32
实习题 33
复习思考题 34
4.1.2 数组的顺序存储结构 35
4.1.1 数组的定义 35
第4章 数组和广义表 35
4.1 数组 35
4.1.3 特殊矩阵的压缩存储 36
4.2 稀疏矩阵 37
4.2.1 三元组表 37
4.2.2 稀疏矩阵的链接存储 40
4.3 数组的应用 41
4.4 广义表 43
4.4.1 广义表的定义 43
4.4.2 广义表的存储结构 44
复习思考题 45
第5章 串 46
5.1 串的基本概念和运算 46
5.1.1 串的基本概念 46
5.1.2 串的基本运算 46
5.2.2 串的链式存储结构 47
5.2.1 串的顺序存储结构 47
5.2 串的存储结构 47
5.3 串运算的算法 48
5.4 文本编辑 51
实习题 52
复习思考题 52
第6章 树和二叉树 53
6.1 树的概念与存储表示 53
6.1.1 树的基本概念 53
6.1.2 树的基本操作 55
6.1.3 树的存储表示 56
6.2 二叉树 59
6.2.1 二叉树的基本概念 59
6.2.2 二叉树的性质 60
6.2.3 二叉树的存储结构 61
6.2.4 二叉树的基本操作及其实现 63
6.3.2 前序遍历 66
6.3.1 二叉树遍历的基本概念 66
6.3 二叉树的遍历 66
6.3.3 中序遍历 69
6.3.4 后序遍历 70
6.3.5 二叉树遍历的应用 72
6.4 线索二叉树 74
6.4.1 线索二叉树的基本概念 74
6.4.2 线索二叉树的基本操作与实现 76
6.5.1 树转换为二叉树 79
6.5 树、森林与二叉树的转换及遍历 79
6.5.2 森林转换为二叉树 80
6.5.3 二叉树还原为树或森林 81
6.5.4 树和森林的遍历 81
6.6 哈夫曼树及其应用 82
6.6.1 路径及路径长度 82
6.6.2 哈夫曼树 83
6.6.3 哈夫曼树的应用 84
实习题 88
复习思考题 89
7.1 图的概念及术语 91
第7章 图 91
7.2 图的存储结构 93
7.2.1 邻接矩阵 93
7.2.2 邻接链表 94
7.3 图的遍历 96
7.3.1 深度优先搜索遍历 96
7.3.2 连通图的广度优先搜索遍历 97
7.4.1 生成树 98
7.4 最小生成树 98
7.4.3 克鲁斯卡尔算法 101
7.5 最短路径 102
7.5.1 最短路径问题 102
7.6 拓扑排序 104
7.7 关键路径 105
复习思考题 108
8.2.1 顺序查找 110
8.2 线性表的查找 110
第8章 查找 110
8.1 查找的基本概念 110
8.2.2 二分查找 111
8.2.3 插值查找 113
8.2.4 分块查找 113
8.3 树表的查找 115
8.3.1 二叉排序树 115
8.3.2 平衡二叉排序树 120
8.3.3 B-树 122
8.3.4 B+树 124
8.4 哈希表和查找 125
8.4.1 哈希表 125
8.4.2 哈希函数 126
8.4.3 冲突的处理 127
实习题 131
复习思考题 131
9.2.1 直接插入排序 133
9.2 插入排序 133
第9章 排序 133
9.1 排序的基本概念 133
9.2.3 希尔排序 136
9.3 交换排序 137
9.3.1 冒泡排序 137
9.3.2 快速排序 138
9.4 选择排序 140
9.4.1 直接选择排序 140
9.4.2 堆排序 141
9.5 归并排序 145
9.6 基数排序 147
9.7 各种内排序方法的讨论 150
实习题 151
复习思考题 151
参考文献 151