目录 第1章绪论/1 1.1数据结构的起源与发展1 1.2基本概念和术语3 1.3理解数据结构4 1.4数据的逻辑结构和存储结构5 1.4.1逻辑结构6 1.4.2存储结构7 1.5数据类型和抽象数据类型9 1.5.1数据类型9 1.5.2抽象数据类型10 1.6算法与算法效率分析11 1.6.1数据结构与算法的关系11 1.6.2算法的定义12 1.6.3算法的5大特性12 1.6.4算法设计的要求13 1.6.5算法效率分析14 1.6.6算法的时间复杂度14 1.6.7算法存储空间需求19 1.7预备知识20 1.7.1C函数20 1.7.2自定义数据类型名21 1.8本章小结23 1.9习题与实验23 第2章线性表/26 2.1问题的提出27 2.2线性表28 2.2.1线性表的定义28 2.2.2线性表的顺序存储结构31 2.2.3顺序表的基本操作实现33 2.2.4线性表的链式存储结构42 2.2.5单向链表的基本操作实现44 2.2.6线性表的两种存储结构的区别55 2.3案例实现56 2.3.1基于顺序表的新生成绩管理系统56 2.3.2基于单向链表的新生成绩管理系统60 2.4其他形式的链表61 2.4.1单向循环链表的定义61 2.4.2单向循环链表的基本操作实现63 2.4.3双向循环链表的定义65 2.4.4双向循环链表的基本操作实现66 2.5线性表的应用68 2.5.1两个线性表的合并68 2.5.2一元多项式的应用71 2.6字符串匹配算法75 2.6.1串的基本概念75 2.6.2串的模式匹配算法75 2.7本章小结83 2.8习题与实验84 新编数据结构及算法教程(第2版)目录第3章栈与队列/88 3.1问题的提出88 3.2栈90 3.2.1栈的定义90 3.2.2栈的顺序存储结构91 3.2.3顺序栈的基本操作实现93 3.2.4栈的链式存储结构97 3.2.5链栈的基本操作实现97 3.2.6栈的两种存储结构的区别101 3.2.7案例实现: 基于栈的括号匹配101 3.3栈的应用103 3.3.1表达式求值103 3.3.2栈与递归109 3.4队列117 3.4.1队列的定义117 3.4.2队列的顺序存储结构119 3.4.3循环队列的基本操作实现121 3.4.4队列的链式存储结构125 3.4.5链队列的基本操作实现126 3.4.6队列的两种存储结构的区别130 3.4.7案例实现: 基于队列的医院挂号模拟系统130 3.5队列的应用132 3.6共用栈和双队列138 3.6.1共用栈138 3.6.2双端队列140 3.7本章小结140 3.8习题与实验141 第4章数组与广义表/146 4.1多维数组146 4.1.1数组的逻辑结构146 4.1.2数组的内存映像147 4.2特殊矩阵的压缩存储149 4.2.1对称矩阵150 4.2.2三角矩阵151 4.2.3带状矩阵152 4.3稀疏矩阵153 4.3.1稀疏矩阵的三元组表存储153 4.3.2稀疏矩阵的十字链表存储159 4.4广义表164 4.4.1广义表的定义和基本运算164 4.4.2广义表的存储166 4.4.3广义表基本操作的实现169 4.5本章小结171 4.6习题与实验171 第5章树和二叉树/174 5.1问题的提出175 5.2树的定义和基本术语176 5.2.1树的递归定义176 5.2.2树的基本术语176 5.2.3树的表示177 5.2.4树的抽象数据类型描述179 5.3二叉树及其应用179 5.3.1二叉树的定义179 5.3.2二叉树的性质181 5.3.3二叉树的抽象数据类型183 5.3.4二叉树的存储结构185 5.3.5二叉树的遍历188 5.3.6二叉树遍历的递归算法188 5.3.7二叉树遍历的非递归算法190 5.3.8二叉树的层次遍历算法197 5.3.9二叉树遍历算法的应用199 5.3.10案例实现: 基于表达式二叉树的动态表达式计算214 5.4线索二叉树215 5.4.1线索二叉树的定义215 5.4.2线索二叉树的基本操作实现217 5.4.3基于中序线索二叉树的遍历算法223 5.5树、森林与二叉树的转换及其应用224 5.5.1树、森林与二叉树的转换224 5.5.2树的存储结构225 5.5.3树的简单应用230 5.5.4树和森林的遍历237 5.5.5案例实现: 基于树结构的行政机构管理239 5.6哈夫曼树及其应用241 5.6.1最优二叉树——哈夫曼树241 5.6.2哈夫曼树及哈夫曼编码的构建算法245 5.7本章小结250 5.8习题与实验250 第6章图/255 6.1问题的提出256 6.2图的定义和基本术语257 6.2.1图的定义257 6.2.2图的基本术语257 6.2.3图的分类258 6.2.4图的抽象数据类型定义260 6.3图的存储结构262 6.3.1图的邻接矩阵表示262 6.3.2图的邻接表表示266 6.3.3有向图的十字链表表示270 6.3.4无向图的邻接多重表表示271 6.4图的遍历273 6.4.1连通图的深度优先搜索273 6.4.2连通图的广度优先搜索277 6.4.3非连通图的深度(广度)优先遍历279 6.4.4图的遍历算法应用279 6.5图的连通性286 6.5.1无向图的连通分量和生成树286 6.5.2求最小生成树的普里姆算法287 6.5.3求最小生成树的克鲁斯卡尔算法293 6.6最短路径298 6.6.1求图中从某个源点到其余各点的最短路径算法298 6.6.2求图中每一对顶点之间的最短路径算法307 6.7有向无环图及其应用312 6.7.1AOV网络及拓扑排序313 6.7.2AOE网络及关键路径316 6.8本章小结323 6.9习题与实验324 第7章查找表/330 7.1问题的提出330 7.2基本概念与描述331 7.2.1查找的基本概念331 7.2.2查找性能分析332 7.2.3数据类型描述332 7.3线性表查找333 7.3.1顺序查找333 7.3.2二分查找335 7.3.3分块查找339 7.3.4案例实现: 学生信息表查询341 7.4树表查找345 7.4.1二叉排序树345 7.4.2平衡二叉树354 7.4.3B树和B+树371 7.4.4案例实现: 基于二叉排序树的学生信息管理380 7.5哈希表385 7.5.1哈希表的概念385 7.5.2常用的哈希函数386 7.5.3处理冲突的方法389 7.5.4哈希表的查找及其性能分析393 7.6本章小结394 7.7习题与实验395 第8章排序/398 8.1问题的提出398 8.2基本概念399 8.3插入排序400 8.3.1直接插入排序401 8.3.2折半插入排序403 8.3.3希尔排序404 8.4交换排序405 8.4.1冒泡排序406 8.4.2快速排序407 8.5选择排序410 8.5.1简单选择排序410 8.5.2堆排序411 8.6归并排序416 8.7基数排序418 8.7.1多关键字排序418 8.7.2链式基数排序419 8.8案例实现: 学生成绩排序系统422 8.9各种内部排序方法的性能比较427 8.10本章小结428 8.11习题与实验428 附录A扩展思维/430 A.1人体网格模型的表示430 A.2图像分割431 A.2.1图像的表示431 A.2.2区域划分原理432 A.3仿真路网建模433 A.3.1路网定义及建模433 A.3.2路网建模结果435 A.4路径规划435 A.5购物推荐436 参考文献/438