第1章 绪论 1
1.1 数据结构与算法 1
1.1.1 数据结构的基本概念 1
第一部分 理论知识 1
1.1.2 算法的概念和特性 2
1.2 算法的描述和分析 2
1.2.1 算法的描述 2
1.2.2 算法的分析 2
习题1 3
第2章 线性表 6
2.1 线性表的逻辑结构 6
2.2 线性表的顺序存储结构 6
2.2.1 顺序分配 6
2.2.2 线性表的操作 7
2.3.1 线性链表的实现 12
2.3 线性表的链式存储结构 12
2.3.2 线性链表的运算 13
2.3.3 循环链表 18
习题2 22
第3章 栈和队列 26
3.1 堆栈 26
3.1.1 堆栈的定义和基本操作 26
3.1.2 顺序存储栈 26
3.1.3 链式存储栈 28
3.2 队列 29
3.2.1 顺序存储队列 29
3.2.2 链式存储队列 31
习题3 32
4.2.1 串的顺序存储结构 35
4.2 字符串的存储结构 35
第4章 字符串、数组和广义表 35
4.1 字符串基本概念 35
4.2.2 串的链式存储结构 36
4.3 字符串的模式匹配 36
4.3.1 模式匹配的BF算法 36
4.3.2 模式匹配的KMP算法 39
4.4 数组的基本概念 43
4.5 矩阵的压缩存储 44
4.5.1 特殊矩阵的压缩 44
4.5.2 稀疏矩阵 45
4.6 广义表 52
4.6.1 广义表的存储结构 53
4.6.2 综合举例 54
习题4 55
5.1.1 树的定义 58
5.1.2 树的基本术语 58
5.1 树的定义和术语 58
第5章 树 58
5.2 二叉树 59
5.2.1 二叉树的定义和性质 59
5.2.2 二叉树的存储结构 60
5.3 遍历二叉树 63
5.3.1 遍历二叉树的方法 63
5.3.2 遍历二叉树的函数 64
5.4 线索二叉树 65
5.5 树和森林 68
5.5.1 树的存储结构 68
5.5.2 树与二叉树的转换 70
5.6 树的应用 72
5.6.1 二叉排序树 72
5.6.2 哈夫曼树 73
习题5 77
第6章 图 82
6.1 图的基本概念 82
6.1.1 图的定义 82
6.1.2 图的相关术语 83
6.2 图的存储结构 86
6.2.1 邻接矩阵 86
6.2.2 邻接表 87
6.3 图的遍历 88
6.3.1 深度优先搜索(DFS) 88
6.3.2 广度优先搜索(BFS) 89
6.4 最小代价生成树 90
6.4.1 最小代价生成树的概念 90
6.4.2 构造最小生成树的PRIM算法 90
6.5.1 求从某个顶点到其他顶点的最短路径 92
6.5 求最短路径 92
6.5.2 求每一对顶点间的最短路径 93
6.6 拓扑排序 94
习题6 96
第7章 查找 101
7.1 线性表的查找 101
7.1.1 顺序存储线性表的查找 101
7.1.2 分块查找 104
7.1.3 链式存储线性表查找 104
7.2 树的查找 105
7.2.1 二叉树查找 105
7.2.2 平衡二叉树 106
7.2.3 B树 109
7.3 哈希表及其查找 110
7.3.1 哈希表 110
7.3.3 解决冲突的方法 111
7.3.2 常见的散列函数 111
习题7 112
第8章 排序 115
8.1 选择排序 115
8.2 直接插入排序 119
8.2.1 顺序存储线性表的直接插入排序 119
8.2.2 链式存储线性表的直接插入排序 121
8.3 冒泡排序 124
8.3.1 顺序存储线性表的冒泡排序 124
8.3.2 链式存储线性表的冒泡排序 125
8.4 希尔排序 127
8.5 堆排序 128
8.6 快速排序 130
8.7 合并排序 132
习题8 133
实验一 时间复杂度的计算 137
第二部分 实验部分 137
实验二 顺序存储线性表的操作(1) 138
实验三 顺序存储线性表的操作(2) 140
实验四 链式存储线性表的操作(1) 142
实验五 链式存储线性表的操作(2) 145
实验六 链式存储线性表的操作(3) 146
实验七 顺序栈的操作 148
实验八 顺序存储队列的进队列和出队列操作 150
实验九 字符串的操作 151
实验十 数组的操作 153
实验十一 “二分法”查找的操作 154
实验十二 插入排序的操作 156
实验十三 选择排序的操作 158
实验十四 快速排序的操作 159
实验十五 冒泡排序和希尔排序的操作 161
参考文献 163