42
2.3.4稀疏矩阵44
2.3.5上三角形矩阵47
2.3.6下三角形矩阵52
2.3.7带状矩阵57
2.4数组与多项式57
课后习题59
第3章链表61
3.1动态分配内存61
3.2单向链表62
3.2.1建立单向链表64
3.2.2单向链表节点的删除68
3.2.3单向链表插入新节点72
3.2.4单向链表的反转77
3.2.5单向链表的功能80
3.2.6多项式链表表式法81
3.3环形链表87
3.3.1环形链表新节点的插入88
3.3.2环形链表中节点的删除88
3.3.3环形链表的串联91
3.3.4稀疏矩阵的环形链表表示法95
3.4双向链表97
3.4.1双向链表的定义97
3.4.2双向链表节点的插入98
3.4.3双向链表节点的删除99
课后习题102
第4章堆栈104
4.1堆栈简介104
4.1.1用数组实现堆栈105
4.1.2用链表来实现堆栈110
4.2堆栈的应用114
4.2.1汉诺塔问题115
4.2.2老鼠走迷宫121
4.2.38-皇后问题126
4.3算术表达式的表示法(即求值法)129
4.3.1中序表示法求值130
4.3.2前序表示法求值131
4.3.3后序表示法求值132
4.4中序法转换为前序法133
4.4.1二叉树法133
4.4.2括号法133
4.4.3堆栈法135
4.5前序与后序表达式转换成中序表达式140
4.5.1括号法140
4.5.2堆栈法141
课后习题143
第5章队列145
5.1认识队列145
5.1.1队列的基本操作146
5.1.2用队列实现数组146
5.1.3用链表实现队列150
5.2队列的应用152
5.2.1环形队列152
5.2.2双向队列156
5.2.3优先队列159
课后习题160
第6章树结构161
6.1树的基本概念162
6.2二叉树简介164
6.2.1二叉树的定义165
6.2.2特殊二叉树简介166
6.3二叉树的存储方式168
6.3.1一维数组表示法168
6.3.2链表表示法170
6.4二叉树的遍历172
6.4.1中序遍历173
6.4.2后序遍历174
6.4.3前序遍历174
6.4.4二叉树遍历的实现176
6.4.5二叉运算树179
6.5二叉树的高级研究184
6.5.1二叉排序树184
6.5.2二叉搜索树188
6.5.3线索二叉树191
6.6树的二叉树表示法196
6.6.1树转化为二叉树196
6.6.2二叉树转化为树198
6.6.3树林转化为二叉树200
6.6.4二叉树转换为树林201
6.6.5树与树林的遍历201
6.6.6确定唯一二叉树205
6.7优化二叉搜索树207
6.7.1扩充二叉树207
6.7.2霍夫曼树208
6.8平衡树210
6.8.1平衡树的定义210
6.8.2B树212
课后习题212
第7章图结构216
7.1图的简介217
7.1.1图的定义217
7.1.2无向图218
7.1.3有向图219
7.2图的数据表示法221
7.2.1邻接矩阵法221
7.2.2邻接链表法225
7.2.3邻接复合链表法229
7.2.4索引表格法231
7.3图的遍历233
7.3.1深度优先遍历法233
7.3.2广度优先遍历法236
7.4生成树239
7.5最小生成树241
7.5.1Prim算法241
7.5.2Kruskal算法243
7.6图的最短路径248
7.6.1单点对全部顶点——Dijkstra算法与A*算法248
7.6.2两两顶点间的最短路径——Floyd算法254
7.7AOV网络与拓扑排序258
7.8AOE网络262
课后习题263
第8章排序267
8.1排序简介268
8.1.1排序的分类268
8.1.2排序算法分析269
8.2内部排序法269
8.2.1冒泡排序法270
8.2.2选择排序法274
8.2.3插入排序法277
8.2.4希尔排序法280
8.2.5合并排序法283
8.2.6快速排序法283
8.2.7堆积排序法287
8.2.8基数排序法293
8.3外部排序法296
8.3.1直接合并排序法297
8.3.2k路合并法305
8.3.3多相合并法305
课后习题306
第9章查找310
9.1常见的查找方法311
9.1.1顺序查找法311
9.1.2二分查找法313
9.1.3插值查找法316
9.1.4斐波拉契查找法319
9.1.5哈希查找法321
9.1.6常见的哈希函数322
9.2碰撞与溢出问题的处理325
9.2.1线性探测法325
9.2.2平方探测法327
9.2.3再哈希法327
9.2.4链表法329
9.2.5哈希法综合范例331
课后习题334
附录AJava9开发环境简介336
附录B课后习题与解答349