目 录 第1章 线性表 1 1.1 线性表抽象类的定义 2 1.2 顺序表类模板 2 1.3 单链表 6 1.3.1 单链表类模板 6 1.3.2 单链表窗体演示程序 10 1.4 循环双链表类模板 14 1.5 静态链表类模板 20 1.6 一元多项式求和 24 习题 27 第2章 栈和队列 33 2.1 栈抽象类的定义 34 2.2 顺序栈 34 2.2.1 顺序栈类模板 34 2.2.2 顺序栈窗体演示程序 37 2.3 链栈类模板 40 2.4 进制转换 42 2.5 队列抽象类的定义 45 2.6 循环队列 46 2.6.1 循环队列类模板 46 2.6.2 循环队列窗体演示程序 48 2.7 链队列类模板 52 2.8 舞伴配对问题 55 习题 57 第3章 字符串和多维数组 63 3.1 BF模式匹配算法 64 3.2 KMP模式匹配算法 67 3.2.1 next数组求解窗体程序 67 3.2.2 KMP算法的实现 71 3.3 特殊矩阵的存储 72 3.3.1 对称矩阵的压缩存储 72 3.3.2 三元组表法存储稀疏矩阵 75 3.3.3 十字链表法存储稀疏矩阵 80 3.4 奇数阶幻方矩阵 89 习题 92 第4章 树和二叉树 95 4.1 树抽象类的定义 96 4.2 二叉树的顺序存储结构 96 4.2.1 二叉树顺序存储控制台 程序 96 4.2.2 二叉树顺序存储窗体 演示程序 100 4.3 二叉树的链式存储结构 103 4.3.1 二叉树链式存储控制台 程序 103 4.3.2 二叉树链式存储窗体 演示程序 108 4.4 线索二叉树 116 4.5 二叉树遍历的非递归算法 120 4.6 哈夫曼树 123 习题 129 第5章 图 133 5.1 图的存储结构 134 5.1.1 邻接矩阵存储结构 134 5.1.2 邻接表存储结构 138 5.1.3 十字链表存储结构 157 5.2 图的遍历 170 5.2.1 深度优先遍历算法实现 171 5.2.2 广度优先遍历算法实现 172 5.3 最小生成树 174 5.3.1 Prim算法实现 175 5.3.2 Kruskal算法实现 186 5.4 最短路径 188 5.4.1 Dijkstra算法实现 189 5.4.2 Folyd算法实现 200 5.5 有向无环图及其应用 202 5.5.1 拓扑排序算法实现 202 5.5.2 关键路径算法实现 209 5.6 七巧板涂色问题 213 习题 218 第6章 查找 225 6.1 线性表的查找 226 6.1.1 顺序查找算法实现 226 6.1.2 折半查找算法实现 230 6.2 树表的查找 234 6.2.1 二叉排序树查找算法实现 234 6.2.2 平衡二叉排序树调整算法 实现 242 6.3 散列表的查找 250 6.3.1 闭散列表查找算法实现 250 6.3.2 开散列表查找算法实现 255 6.4 MD5散列算法 259 习题 262 第7章 排序 265 7.1 插入排序 266 7.1.1 直接插入排序算法实现 266 7.1.2 希尔排序算法实现 271 7.2 交换排序 275 7.2.1 冒泡排序算法实现 275 7.2.2 快速排序算法实现 280 7.3 选择排序 285 7.3.1 简单选择排序算法实现 285 7.3.2 堆排序算法实现 290 7.4 二路归并排序算法实现 293 7.5 分配排序 296 7.5.1 桶排序算法实现 296 7.5.2 基数排序算法实现 303 7.6 荷兰国旗问题 310 习题 315 参考文献 318