第1章 绪论 (1)
1.1 数据结构的基本概念 (1)
1.1.1 基本概念和术语 (3)
1.1.2 数据的逻辑结构 (4)
1.1.3 数据的存储结构 (6)
1.2 抽象数据类型 (7)
1.2.1 什么是抽象数据类型 (7)
1.2.2 抽象数据类型的描述 (7)
1.3 算法的定义及特征 (8)
1.3.1 算法的定义及特征 (8)
1.3.2 算法设计的要求 (9)
1.4 算法的度量及分析 (9)
1.4.1 算法效率的度量 (9)
1.4.2 时间复杂度分析 (10)
1.4.3 常见的时间复杂度 (11)
1.4.4 空间复杂度分析 (12)
习题 (12)
第2章 线性表 (15)
2.1 定义 (16)
2.1.1 什么是线性表 (16)
2.1.2 线性表的抽象数据类型 (16)
2.2 顺序线性表 (17)
2.2.1 线性表的顺序存储 (17)
2.2.2 顺序表的基本操作 (19)
2.2.3 综合应用实例——扑克牌游戏 (24)
2.3 链式线性表(一) (29)
2.3.1 线性表的链式存储 (29)
2.3.2 单链表的基本操作 (31)
2.3.3 综合应用实例——学生信息管理系统 (36)
2.4 链式线性表(二) (40)
2.4.1 循环链表 (40)
2.4.2 双向链表 (40)
2.4.3 综合应用实例——约瑟夫问题 (44)
2.5 顺序表与链表的比较 (48)
习题 (48)第3章 栈和队列 (52)
3.1 栈 (52)
3.1.1 定义 (52)
3.1.2 栈的抽象数据类型 (53)
3.2 顺序栈 (54)
3.2.1 顺序栈的存储结构 (54)
3.2.2 顺序栈的基本操作 (54)
3.2.3 综合应用实例——表达式求值 (57)
3.3 链栈 (62)
3.3.1 链栈的存储结构 (62)
3.3.2 链栈的基本操作 (63)
3.3.3 综合应用实例——老鼠钻迷宫 (66)
3.4 队列 (72)
3.4.1 定义 (73)
3.4.2 队列的抽象数据类型 (73)
3.5 顺序队列 (74)
3.5.1 顺序队列的存储结构 (74)
3.5.2 循环队列的逻辑结构 (75)
3.5.3 循环队列的基本操作 (77)
3.5.4 综合应用实例——打印文档 (79)
3.6 链队列 (81)
3.6.1 链队列的存储结构 (81)
3.6.2 链队列的基本操作 (81)
3.6.3 综合应用实例——火车车厢重排 (84)
习题 (89)
第4章 串 (93)
4.1 定义 (93)
4.1.1 什么是串 (93)
4.1.2 串的抽象数据类型 (94)
4.2 串的顺序存储 (94)
4.2.1 串的顺序存储结构 (95)
4.2.2 顺序存储的基本操作 (95)
4.3 串的堆存储 (97)
4.3.1 串的堆存储结构 (97)
4.3.2 堆存储的基本操作 (97)
4.4 串的链式存储 (100)
4.4.1 串的链式存储结构 (100)
4.4.2 链式存储的基本操作 (101)
4.5 串的模式匹配 (103)
4.5.1 Brute-Force算法 (103)
4.5.2 KMP算法 (104)
4.5.3 综合应用实例——简易的“记事本” (110)
习题 (114)
第5章 数组和广义表 (116)
5.1 数组 (116)
5.1.1 数组的定义及存储 (116)
5.1.2 数组的抽象数据类型 (118)
5.2 特殊矩阵 (118)
5.2.1 对称矩阵 (118)
5.2.2 三角矩阵 (119)
5.2.3 对角矩阵 (120)
5.3 稀疏矩阵 (121)
5.3.1 稀疏矩阵的存储结构 (121)
5.3.2 稀疏矩阵的基本操作 (122)
5.3.3 稀疏矩阵的十字链表表示 (126)
5.4 广义表 (129)
5.4.1 广义表的定义 (130)
5.4.2 广义表的抽象数据类型 (131)
5.4.3 广义表的存储结构 (131)
5.4.4 广义表的基本操作 (132)
5.4.5 综合应用实例——文件目录结构 (136)
习题 (139)
第6章 树及二叉树 (142)
6.1 树及其表示 (143)
6.1.1 树的定义和术语 (143)
6.1.2 树的逻辑表示 (145)
6.1.3 树的抽象数据类型 (146)
6.1.4 树的存储结构 (146)
6.2 二叉树 (149)
6.2.1 二叉树的定义 (149)
6.2.2 二叉树的性质 (151)
6.2.3 二叉树的抽象数据类型 (151)
6.2.4 二叉树的存储结构 (152)
6.2.5 二叉树的基本操作 (154)
6.2.6 二叉树的遍历 (157)
6.2.7 综合应用实例——算术表达式的计算 (158)
6.3 二叉树的线索化 (162)
6.3.1 线索二叉树的定义 (163)
6.3.2 中序线索化二叉树 (163)
6.3.3 线索二叉树的操作 (165)
6.4 树、森林与二叉树的转换 (167)
6.4.1 树与二叉树的相互转化 (167)
6.4.2 森林与二叉树的相互转换 (168)
6.5 哈夫曼树及哈夫曼编码 (170)
6.5.1 哈夫曼树 (170)
6.5.2 哈夫曼编码 (173)
6.5.3 综合应用实例——电报编码 (176)
习题 (179)
第7章 图 (184)
7.1 定义 (184)
7.1.1 什么是图 (184)
7.1.2 图的常用术语 (185)
7.1.3 图的抽象数据类型 (188)
7.2 图的存储结构 (189)
7.2.1 邻接矩阵 (189)
7.2.2 邻接表 (191)
7.2.3 十字链表 (194)
7.3 图的遍历 (195)
7.3.1 深度优先搜索 (195)
7.3.2 广度优先搜索 (197)
7.4 最小生成树 (199)
7.4.1 普里姆算法 (200)
7.4.2 克鲁斯卡尔算法 (202)
7.5 最短路径 (204)
7.5.1 从某个源点到其余各顶点的最短路径 (205)
7.5.2 每一对顶点之间的最短路径 (207)
7.5.3 综合应用实例——高速公路行驶最佳方案 (209)
7.6 拓扑排序和关键路径 (212)
7.6.1 拓扑排序 (213)
7.6.2 关键路径 (215)
7.6.3 综合应用实例——计算机课程学习的优先顺序 (219)
习题 (221)
第8章 排序 (227)
8.1 定义 (228)
8.1.1 什么是排序 (228)
8.1.2 排序算法的分类 (229)
8.2 插入排序 (229)
8.2.1 直接插入排序 (230)
8.2.2 二分插入排序 (231)
8.2.3 希尔排序 (232)
8.3 交换排序 (233)
8.3.1 冒泡排序 (233)
8.3.2 快速排序 (236)
8.4 选择排序 (238)
8.4.1 直接选择排序 (238)
8.4.2 堆排序 (240)
8.5 归并排序 (244)
8.6 基数排序 (245)
8.7 几种排序算法的比较 (247)
习题 (248)
第9章 查找 (251)
9.1 定义 (251)
9.1.1 什么是查找 (251)
9.1.2 查找的性能分析 (252)
9.2 静态查找 (253)
9.2.1 顺序表的查找 (253)
9.2.2 有序表的查找 (254)
9.2.3 索引顺序表的查找 (256)
9.3 动态查找 (257)
9.3.1 二叉排序树 (258)
9.3.2 平衡二叉树 (263)
9.3.3 B-树和B+树 (266)
9.4 哈希表 (270)
9.4.1 定义 (271)
9.4.2 哈希函数的构造方法 (272)
9.4.3 处理冲突的方法 (274)
9.4.4 哈希表的基本操作 (276)
习题 (278)
附录A 认识Visual C++ 6.0中文版开发环境 (282)
附录B 程序组织、预处理和调试 (292)
B.1 设置断点 (292)
B.2 控制程序运行 (293)
B.3 查看变量或数组的内容 (294)
B.4 退出Visual C++ 6.0 (295)