目录 第1章绪论1 1.1数据结构的概念和学习数据结构的必要性1 1.2数据结构的基本概念2 1.2.1数据2 1.2.2数据元素和数据项2 1.2.3数据结构3 1.3抽象数据类型及其实现4 1.3.1数据类型4 1.3.2抽象数据类型4 1.4算法和算法分析4 1.4.1算法4 1.4.2算法分析5 1.5实例研究: 生命游戏7 1.6深入学习导读13 1.7习题13 第2章线性表14 2.1线性表的逻辑结构14 2.2线性表的顺序存储结构16 2.3线性表的链式存储结构23 2.3.1单链表23 2.3.2循环链表32 2.3.3双向链表35 2.3.4在链表结构中保存当前位置和元素个数39 2.4实例研究: 计算任意大整数的阶乘42 2.5深入学习导读45 2.6习题45 第3章栈和队列46 3.1栈46 3.1.1栈的基本概念46 3.1.2顺序栈47 3.1.3链式栈52 3.2队列59 3.2.1队列的基本概念59 3.2.2链队列60 3.2.3循环队列——队列的顺序存储结构65 3.2.4队列应用——显示二项式(a+b)i的系数70 3.3优先队列71 3.4实例研究: 表达式求值75 3.5深入学习导读79 3.6习题79 第4章串80 4.1串类型的定义80 4.2字符串的实现81 4.3字符串模式匹配算法86 4.3.1简单字符串模式匹配算法86 4.3.2首尾字符串模式匹配算法88 4.3.3KMP字符串模式匹配算法88 4.4实例研究: 文本编辑94 4.5深入学习导读103 4.6习题103 第5章数组和广义表105 5.1数组105 5.1.1数组的基本概念105 5.1.2数组的顺序表105 5.1.3数组的类模板定义107 5.2矩阵111 5.2.1矩阵的定义和操作111 5.2.2特殊矩阵113 5.2.3稀疏矩阵118 5.3广义表130 5.3.1基本概念130 5.3.2广义表的存储结构132 5.4实例研究: 稳定伴侣问题142 5.5深入学习导读145 5.6习题146 第6章树和二叉树147 6.1树的基本概念147 6.1.1树的定义147 6.1.2基本术语147 6.2二叉树149 6.2.1二叉树的定义149 6.2.2二叉树的性质151 6.2.3二叉树的存储结构153 6.3二叉树遍历162 6.3.1遍历的定义162 6.3.2遍历算法163 6.3.3二叉树遍历应用举例169 6.4线索二叉树174 6.4.1线索的概念174 6.4.2线索二叉树的实现176 6.5树和森林的实现184 6.5.1树的存储表示184 6.5.2树的显示191 6.5.3森林的存储表示192 6.5.4树和森林的遍历197 6.5.5将树和森林与二叉树相互转换199 6.6哈夫曼树与哈夫曼编码202 6.6.1哈夫曼树的基本概念202 6.6.2哈夫曼树构造算法203 6.6.3哈夫曼编码204 6.6.4哈夫曼树的实现205 6.7树的计数209 6.8树在等价关系上的应用212 6.9实例研究: 哈夫曼压缩算法216 6.10深入学习导读221 6.11习题222 第7章图223 7.1图的定义和术语223 7.2图的存储表示227 7.2.1邻接矩阵227 7.2.2邻接表232 7.3图的遍历240 7.3.1深度优先搜索240 7.3.2广度优先搜索242 7.4连通无向网的最小代价生成树244 7.4.1Prim算法244 7.4.2Kruskal算法247 7.5有向无环图及应用250 7.5.1拓扑排序251 7.5.2关键路径253 7.6最短路径257 7.6.1单源点最短路径问题258 7.6.2所有顶点之间的最短路径261 7.7实例研究: 周游世界问题——哈密顿圈263 7.8深入学习导读265 7.9习题265 第8章查找267 8.1查找的基本概念267 8.2静态表的查找267 8.2.1顺序查找267 8.2.2有序表的查找268 8.3动态查找表272 8.3.1二叉排序树272 8.3.2平衡二叉树282 8.3.3B树和B+树306 8.4哈希表309 8.4.1哈希表的概念309 8.4.2构造哈希函数的方法309 8.4.3处理冲突的方法309 8.4.4哈希表的实现311 8.5实例研究: 查找3个数组的最小共同元素316 8.6深入学习导读317 8.7习题317 第9章排序319 9.1概述319 9.2插入排序320 9.2.1直接插入排序320 9.2.2Shell排序321 9.3交换排序323 9.3.1冒泡排序323 9.3.2快速排序324 9.4选择排序327 9.4.1简单选择排序327 9.4.2堆排序328 9.5归并排序332 9.6基数排序336 9.6.1多关键字排序336 9.6.2基数排序337 9.7各种内部排序方法讨论339 9.8外部排序341 9.8.1外部排序基础341 9.8.2外部排序的方法342 9.9实例研究: 用堆实现优先队列343 9.10深入学习导读346 9.11习题346 第10章文件348 10.1主存储器和辅助存储器348 10.2各种常用文件结构348 10.2.1顺序文件348 10.2.2索引文件349 10.2.3哈希文件350 10.3实例研究350 10.3.1VSAM文件350 10.3.2多关键字文件351 10.4深入学习导读353 10.5习题353 第11章算法设计与分析354 11.1算法设计354 11.1.1递归算法354 11.1.2分治算法356 11.1.3动态规划算法357 11.1.4贪婪算法358 11.1.5回溯法359 11.1.6分支限界法361 11.2算法分析363 11.2.1递归分析363 11.2.2利用生成函数进行分析364 11.3实例研究: 图着色问题366 11.4深入学习导读368 11.5习题368 参考文献370 附录A调和级数371 附录B泊松分布372 附录C配套软件包文件索引373 附录D主流C++开发环境的使用方法379