封面
版权信息
内容简介
前言
为什么要学习数据结构与算法
如何学好数据结构与算法
如何使用本书
致谢
第一篇 基础知识
第1章 数据结构概述
1.1 为什么要学习数据结构
1.2 基本概念和术语
1.3 数据的逻辑结构与存储结构
1.3.1 逻辑结构
1.3.2 存储结构
1.4 抽象数据类型及其描述
1.4.1 什么是抽象数据类型
1.4.2 抽象数据类型的描述
1.5 算法
1.5.1 数据结构与算法的关系
1.5.2 什么是算法
1.5.3 算法的五大特性
1.5.4 算法的描述方式
1.6 算法分析
1.6.1 算法设计的4个目标
1.6.2 算法效率评价
1.6.3 算法时间复杂度
1.6.4 算法空间复杂度
1.7 学好数据结构的秘诀
第2章 数据结构与算法基础
2.1 递归与非递归
2.1.1 函数的递归调用
2.1.2 递归应用举例
2.1.3 迭代与递归
2.2 指针
2.2.1 什么是指针
2.2.2 指针变量的间接引用
2.2.3 指针与数组
2.2.4 指针函数与函数指针
2.3 参数传递
2.3.1 传值调用
2.3.2 传地址调用
2.4 结构体
2.4.1 结构体的定义
2.4.2 指向结构体的指针
2.4.3 用typedef定义数据类型
2.5 小结
第二篇 线性数据结构
第3章 线性表
3.1 线性表的定义及抽象数据类型
3.1.1 线性表的逻辑结构
3.1.2 线性表的抽象数据类型
3.2 线性表的顺序表示与实现
3.2.1 线性表的顺序存储结构
3.2.2 顺序表的基本运算
3.2.3 顺序表的实现算法分析
3.2.4 顺序表的优缺点
3.2.5 顺序表应用举例
3.3 线性表的链式表示与实现
3.3.1 单链表的存储结构
3.3.2 单链表上的基本运算
3.3.3 单链表存储结构与顺序存储结构的优缺点
3.3.4 单链表应用举例
3.4 循环单链表
3.5 双向链表
3.5.1 双向链表的存储结构
3.5.2 双向链表的插入和删除操作
3.5.3 双向链表应用举例
3.6 综合案例:一元多项式的表示与相加
3.6.1 一元多项式的表示
3.6.2 一元多项式相加
3.7 小结
第4章 栈和队列
4.1 栈的定义与抽象数据类型
4.1.1 什么是栈
4.1.2 栈的抽象数据类型
4.2 栈的顺序表示与实现
4.2.1 栈的顺序存储结构
4.2.2 顺序栈的基本运算
4.2.3 顺序栈应用举例
4.3 栈的链式表示与实现
4.3.1 栈的链式存储结构
4.3.2 链栈的基本运算
4.4 栈与递归
4.4.1 递归
4.4.2 消除递归
4.5 队列的定义与抽象数据类型
4.5.1 什么是队列
4.5.2 队列的抽象数据类型
4.6 队列的顺序存储及实现
4.6.1 顺序循环队列——顺序队列的表示
4.6.2 顺序循环队列的基本运算
4.7 队列的链式存储及实现
4.7.1 链式队列的表示
4.7.2 链式队列的基本运算
4.8 双端队列
4.8.1 什么是双端队列
4.8.2 双端队列的应用
4.9 栈与队列的典型应用
4.9.1 求算术表达式的值
4.9.2 舞伴配对
4.10 小结
第5章 串、数组与广义表
5.1 串的定义及抽象数据类型
5.1.1 什么是串
5.1.2 串的抽象数据类型
5.2 串的存储表示与实现
5.2.1 串的顺序存储结构及基本运算
5.2.2 串的链式存储结构
5.2.3 顺序串应用举例
5.3 串的模式匹配
5.3.1 朴素模式匹配算法——Brute-Force
5.3.2 KMP算法
5.3.3 模式匹配应用举例
5.4 数组的定义及抽象数据类型
5.4.1 重新认识数组
5.4.2 数组的抽象数据类型
5.4.3 数组的顺序存储结构
5.5 特殊矩阵的压缩存储
5.5.1 对称矩阵的压缩存储
5.5.2 三角矩阵的压缩存储
5.5.3 对角矩阵的压缩存储
5.6 稀疏矩阵的压缩存储
5.6.1 什么是稀疏矩阵
5.6.2 稀疏矩阵抽象数据类型
5.6.3 稀疏矩阵的三元组表示
5.6.4 稀疏矩阵的三元组实现
5.6.5 稀疏矩阵应用举例——三元组表示的稀疏矩阵相加
5.7 广义表
5.7.1 什么是广义表
5.7.2 广义表的抽象数据类型
5.7.3 广义表的头尾链表存储结构
5.7.4 广义表的扩展线性链表存储结构
5.8 小结
第三篇 非线性数据结构
第6章 树
6.1 树的相关概念及抽象数据类型
6.1.1 什么是树
6.1.2 树的相关概念
6.1.3 树的逻辑表示
6.1.4 树的存储结构
6.2 二叉树的相关概念及抽象数据类型
6.2.1 什么是二叉树
6.2.2 二叉树的性质
6.2.3 二叉树的抽象数据类型
6.2.4 二叉树的存储表示与实现
6.3 遍历二叉树
6.3.1 什么是遍历二叉树
6.3.2 二叉树的先序遍历
6.3.3 二叉树的中序遍历
6.3.4 二叉树的后序遍历
6.4 遍历二叉树的应用
6.4.1 按层次输出二叉树
6.4.2 二叉树的计数
6.4.3 求叶子结点的最大最小枝长
6.4.4 判断两棵二叉树是否相似
6.4.5 交换二叉树的左右子树
6.4.6 求根结点到r结点之间的路径
6.5 线索二叉树
6.5.1 什么是线索化二叉树
6.5.2 线索二叉树
6.5.3 遍历线索二叉树
6.6 树、森林与二叉树
6.6.1 树转换为二叉树
6.6.2 森林转换为二叉树
6.6.3 二叉树转换为树和森林
6.6.4 树和森林的遍历
6.6.5 树与二叉树应用举例
6.7 综合案例:哈夫曼树
6.7.1 什么是哈夫曼树
6.7.2 哈夫曼编码
6.7.3 哈夫曼编码算法的实现
6.8 小结
第7章 图
7.1 图的定义与相关概念
7.1.1 什么是图
7.1.2 图的相关概念
7.1.3 图的抽象数据类型
7.2 图的存储结构
7.2.1 邻接矩阵(数组表示法)
7.2.2 邻接表
7.2.3 十字链表
7.2.4 邻接多重链表
7.3 图的遍历
7.3.1 图的深度优先搜索
7.3.2 图的广度优先搜索
7.4 图的连通性问题
7.4.1 无向图的连通分量与最小生成树
7.4.2 最小生成树
7.5 有向无环图
7.5.1 AOV网与拓扑排序
7.5.2 AOE网与关键路径
7.6 最短路径
7.6.1 从某个顶点到其余各顶点的最短路径
7.6.2 每一对顶点之间的最短路径
7.6.3 最短路径应用举例
7.7 图的应用举例
7.8 小结
第四篇 常用算法
第8章 查找
8.1 基本概念
8.2 静态查找
8.2.1 顺序表的查找
8.2.2 有序顺序表的查找
8.2.3 索引顺序表的查找
8.3 动态查找
8.3.1 二叉排序树
8.3.2 平衡二叉树
8.4 B-树与B+树
8.4.1 B-树
8.4.2 B+树
8.5 哈希表
8.5.1 什么是哈希表
8.5.2 哈希函数的构造方法
8.5.3 处理冲突的方法
8.5.4 哈希表应用举例
8.6 小结
第9章 排序
9.1 基本概念
9.2 插入排序
9.2.1 直接插入排序
9.2.2 折半插入排序
9.2.3 希尔排序
9.2.4 插入排序应用举例
9.3 交换排序
9.3.1 冒泡排序
9.3.2 快速排序
9.3.3 交换排序应用举例
9.4 选择排序
9.4.1 简单选择排序
9.4.2 堆排序
9.4.3 选择排序应用举例
9.5 归并排序
9.6 基数排序
9.6.1 基数排序算法
9.6.2 基数排序应用举例
9.7 小结
第10章 回溯算法
10.1 和式分解
10.2 填字游戏
10.3 装载问题
10.4 迷宫问题
第11章 贪心算法
11.1 找零钱问题
11.2 哈夫曼编码
11.3 加油站问题
第12章 分治算法
12.1 最大子序列和问题
12.2 求x的n次幂
12.3 众数问题
12.4 求n个数中的最大者和最小者
12.5 整数划分问题
12.6 大整数乘法
第13章 实用算法
13.1 大小写金额转换
13.2 将15位身份证号转换为18位
13.3 微信抢红包问题
13.4 一元多项式的乘法
13.5 大整数乘法
参考文献
更新时间:2023-07-17 19:21:41