第1章 绪论\t1
1.1 数据结构的概念\t1
1.2 为什么要学习数据结构\t3
1.3 算法\t4
本章小结\t7
本章习题\t8
第2章 线性表\t10
2.1 基本概念与抽象数据类型\t10
2.2 顺序表示\t12
2.3 链式表示\t14
2.4 单链表的改进和扩充\t20
2.5 应用举例\t23
2.6 链表相关操作的Java实现\t27
本章小结\t33
本章习题\t33
第3章 栈和队列\t36
3.1 栈\t36
3.2 队列\t42
3.3 堆栈与队列的Java实现\t52
本章小结\t56
本章习题\t56
第4章 串\t59
4.1 串的基本概念与抽象数据类型\t59
4.2 串的存储结构\t62
4.3 串运算的实现\t66
4.4 KMP算法\t69
本章小结\t72
本章习题\t73
第5章 多维数组和广义表\t74
5.1 多维数组\t74
5.2 矩阵的压缩存储\t76
5.3 广义表\t84
本章小结\t89
本章习题\t89
第6章 树\t91
6.1 树、森林及其相关概念\t91
6.2 二叉树及其相关特性\t93
6.3 二叉树的存储\t96
6.4 二叉树的遍历\t99
6.5 线索二叉树\t103
6.6 二叉树、树和森林之间的转换\t108
6.7 哈夫曼树及其应用\t110
6.8 二叉树相关操作的Java实现\t118
本章小结\t122
本章习题\t122
第7章 图\t125
7.1 图的概念\t125
7.2 图的存储\t128
7.3 图的遍历\t135
7.4 生成树和最小生成树\t144
7.5 最短路径\t153
7.6 拓扑排序\t156
7.7 关键路径\t159
7.8 相关算法的Java实现\t165
本章小结\t171
本章习题\t171
第8章 排序\t175
8.1 基本概念\t175
8.2 插入排序\t177
8.3 交换排序\t182
8.4 选择排序\t188
8.5 归并排序\t194
8.6 内部排序方法的比较和选择\t198
8.7 排序算法的Java实现\t199
本章小结\t204
本章习题\t204
第9章 查找\t207
9.1 线性表的查找\t207
9.2 树表的查找\t212
9.3 散列表的查找\t225
9.4 散列表(链地址法)的Java实现\t234
本章小结\t235
本章习题\t235
第10章 经典算法分析\t238
10.1 分治算法\t238
10.2 动态规划算法\t241
10.3 贪心算法\t245
10.4 回溯算法\t249
10.5 分支限界算法\t251
本章小结\t255
本章习题\t255
参考文献 \t256