大话数据结构

🌙
手机阅读
本文目录结构

大话数据结构

内容简介

《大话数据结构》为超级畅销书《大话设计模式》作者程杰潜心三年推出的扛鼎之作!以一个计算机教师教学为场景,讲解数据结构和相关算法的知识。通篇以一种趣味方式来叙述,大量引用了各种各样的生活知识来类比,并充分运用图形语言来体现抽象内容,对数据结构所涉及到的一些经典算法做到逐行分析、多算法比较。与市场上的同类数据结构图书相比,本书内容趣味易读,算法讲解细致深刻,是一本非常适合自学的读物。

作者简介

程杰,一个被读者誉为很适合写 IT 技术书的家伙。《大话设计模式》作者。此书 07 年末出版至今已经简体版印刷 9 次、繁体版印刷 6 次,取得了较好的成绩,开创了一种适合国人阅读的趣味讲解 IT 知识的风格模式。其本人参与过政府、证券、游戏、交通等多种行业的软件开发及项目管理工作,也曾做过软件培训的教师。因曾有过两年半高中数学教学的独特经历,使得其书作当中处处以初学者视角考虑和分析问题,他成为了当前很受欢迎的 IT 技术图书作者之一。

目录

第 1 章 数据结构绪论

  • 1.1 开场白
  • 1.2 你数据结构怎么学的?
  • 1.3 数据结构起源
  • 1.4 基本概念和术语
  • 1.4.1 数据
  • 1.4.2 数据元素
  • 1.4.3 数据项
  • 1.4.4 数据对象
  • 1.4.5 数据结构
  • 1.5 逻辑结构与物理结构
  • 1.5.1 逻辑结构
  • 1.5.2 物理结构
  • 1.6 抽象数据类型
  • 1.6.1 数据类型
  • 1.6.2 抽象数据类型
  • 1.7 总结回顾
  • 1.8 结尾语

第 2 章 算法

  • 2.1 开场白
  • 2.2 数据结构与算法关系
  • 2.3 两种算法的比较
  • 2.4 算法定义
  • 2.5 算法的特性
  • 2.5.1 输入输出
  • 2.5.2 有穷性
  • 2.5.3 确定性
  • 2.5.4 可行性
  • 2.6 算法设计的要求
  • 2.6.1 正确性
  • 2.6.2 可读性
  • 2.6.3 健壮性
  • 2.6.4 时间效率高和存储量低
  • 2.7 算法效率的度量方法
  • 2.7.1 事后统计方法
  • 2.7.2 事前分析估算方法
  • 2.8 函数的渐近增长
  • 2.9 算法时间复杂度
  • 2.9.1 算法时间复杂度定义
  • 2.9.2 推导大 O 阶方法
  • 2.9.3 常数阶
  • 2.9.4 线性阶
  • 2.9.5 对数阶
  • 2.9.6 平方阶
  • 2.10 常见的时间复杂度
  • 2.11 最坏情况与平均情况
  • 2.12 算法空间复杂度
  • 2.13 总结回顾
  • 2.14 结尾语

第 3 章 线性表

  • 3.1 开场白
  • 3.2 线性表的定义
  • 3.3 线性表的抽象数据类型
  • 3.4 线性表的顺序存储结构
  • 3.4.1 顺序存储定义
  • 3.4.2 顺序存储方式
  • 3.4.3 数据长度与线性表长度区别
  • 3.4.4 地址计算方法
  • 3.5 顺序存储结构的插入与删除
  • 3.5.1 获得元素操作
  • 3.5.2 插入操作
  • 3.5.3 删除操作
  • 3.5.4 线性表顺序存储结构的优缺点
  • 3.6 线性表的链式存储结构
  • 3.6.1 顺序存储结构不足的解决办法
  • 3.6.2 线性表链式存储结构定义
  • 3.6.3 头指针与头结点的异同
  • 3.6.4 线性表链式存储结构代码描述
  • 3.7 单链表的读取
  • 3.8 单链表的插入与删除
  • 3.8.1 单链表的插入
  • 3.8.2 单链表的删除
  • 3.9 单链表的整表创建
  • 3.10 单链表的整表删除
  • 3.11 单链表结构与顺序存储结构优缺点
  • 3.12 静态链表
  • 3.12.1 静态链表的插入操作
  • 3.12.2 静态链表的删除操作
  • 3.12.3 静态链表优缺点
  • 3.13 循环链表
  • 3.14 双向链表
  • 3.15 总结回顾
  • 3.16 结尾语

第 4 章 栈与队列

  • 4.1 开场白
  • 4.2 栈的定义
  • 4.2.1 栈的定义
  • 4.2.2 进栈出栈变化形式
  • 4.3 栈的抽象数据类型
  • 4.4 栈的顺序存储结构及实现
  • 4.4.1 栈的顺序存储结构
  • 4.4.2 栈的顺序存储结构进栈操作
  • 4.4.3 栈的顺序存储结构出栈操作
  • 4.5 两栈共享空间
  • 4.6 栈的链式存储结构及实现
  • 4.6.1 栈的链式存储结构
  • 4.6.2 栈的链式存储结构进栈操作
  • 4.6.3 栈的链式存储结构出栈操作
  • 4.7 栈的作用
  • 4.8 栈的应用 – 递归
  • 4.8.1 斐波那契数列实现
  • 4.8.2 递归定义
  • 4.9 栈的应用 – 四则运算表达式求值
  • 4.9.1 后缀(逆波兰)表示法定义
  • 4.9.2 后缀表达式计算结果
  • 4.9.3 中缀表达式转后缀表达式
  • 4.10 队列的定义
  • 4.11 队列的抽象数据类型
  • 4.12 循环队列
  • 4.12.1 队列顺序存储的不足
  • 4.12.2 循环队列定义
  • 4.13 队列的链式存储结构及实现
  • 4.13.1 队列链式存储结构入队操作
  • 4.13.2 队列链式存储结构出队操作
  • 4.14 总结回顾
  • 4.15 结尾语

第 5 章 串

  • 5.1 开场白
  • 05.2 串的定义
  • 5.3 串的比较
  • 5.4 串的抽象数据类型
  • 5.5 串的存储结构
  • 5.5.1 串的顺序存储结构
  • 5.5.2 串的链式存储结构
  • 5.6 朴素的模式匹配算法
  • 5.7 KMP 模式匹配算法
  • 5.7.1 KMP 模式匹配算法原理
  • 5.7.2 next 数组值推导
  • 5.7.3 KMP 模式匹配算法实现
  • 5.7.4 KMP 模式匹配算法改进
  • 5.7.5 nextval 数组值推导
  • 5.8 总结回顾
  • 5.9 结尾语

第 6 章 树

  • 6.1 开场白
  • 6.2 树的定义
  • 6.2.1 结点分类
  • 6.2.2 结点间关系
  • 6.2.3 树的其他相关概念
  • 6.3 树的抽象数据类型
  • 6.4 树的存储结构
  • 6.4.1 双亲表示法
  • 6.4.2 孩子表示法
  • 6.4.3 孩子兄弟表示法
  • 6.5 二叉树的定义
  • 6.5.1 二叉树特点
  • 6.5.2 特殊二叉树
  • 6.6 二叉树的性质
  • 6.6.1 二叉树性质 1
  • 6.6.2 二叉树性质 2
  • 6.6.3 二叉树性质 3
  • 6.6.4 二叉树性质 4
  • 6.6.5 二叉树性质 5
  • 6.7 二叉树的存储结构
  • 6.7.1 二叉树顺序存储结构
  • 6.7.2 二叉链表
  • 6.8 遍历二叉树
  • 6.8.1 二叉树遍历原理
  • 6.8.2 二叉树遍历方法
  • 6.8.3 前序遍历算法
  • 6.8.4 中序遍历算法
  • 6.8.5 后序遍历算法
  • 6.8.6 推导遍历结果
  • 6.9 二叉树的建立
  • 6.10 线索二叉树
  • 6.10.1 线索二叉树原理
  • 6.10.2 线索二叉树结构实现
  • 6.11 树、森林与二叉树的转换
  • 6.11.1 树转换为二叉树
  • 6.11.2 森林转换为二叉树
  • 6.11.3 二叉树转换为树
  • 6.11.4 二叉树转换为森林
  • 6.11.5 树与森林的遍历
  • 6.12 赫夫曼树及其应用
  • 6.12.1 赫夫曼树
  • 6.12.2 赫夫曼树定义与原理
  • 6.12.3 赫夫曼编码
  • 6.13 总结回顾
  • 6.14 结尾语

第 7 章 图

  • 7.1 开场白
  • 7.2 图的定义
  • 7.2.1 各种图定义
  • 7.2.2 图的顶点与边间关系
  • 7.2.3 连通图相关术语
  • 7.2.4 图的定义与术语总结
  • 7.3 图的抽象数据类型
  • 7.4 图的存储结构
  • 7.4.1 邻接矩阵
  • 7.4.2 邻接表
  • 7.4.3 十字链表
  • 7.4.4 邻接多重表
  • 7.4.5 边集数组
  • 7.5 图的遍历
  • 7.5.1 深度优先遍历
  • 7.5.2 广度优先遍历
  • 7.6 最小生成树
  • 7.6.1 普里姆(Prim)算法
  • 7.6.2 克鲁斯卡尔(Kruskal)算法
  • 7.7 最短路径
  • 7.7.1 迪杰斯特拉(Dijkstra)算法
  • 7.7.2 弗洛伊德(Floyd)算法
  • 7.8 拓扑排序
  • 7.8.1 拓扑排序介绍
  • 7.8.2 拓扑排序算法
  • 7.9 关键路径
  • 7.9.1 关键路径算法原理
  • 7.9.2 关键路径算法
  • 7.10 总结回顾
  • 7.11 结尾语

第 8 章 查找

  • 8.1 开场白
  • 8.2 查找概论
  • 8.3 顺序表查找
  • 8.3.1 顺序表查找算法
  • 8.3.2 顺序表查找优化
  • 8.4 有序表查找
  • 8.4.1 折半查找
  • 8.4.2 插值查找
  • 8.4.3 斐波那契查找
  • 8.5 线性索引查找
  • 8.5.1 稠密索引
  • 8.5.2 分块索引
  • 8.5.3 倒排索引
  • 8.6 二叉排序树
  • 8.6.1 二叉排序树查找操作
  • 8.6.2 二叉排序树插入操作
  • 8.6.3 二叉排序树删除操作
  • 8.6.4 二叉排序树总结
  • 8.7 平衡二叉树(AVL 树)
  • 8.7.1 平衡二叉树实现原理
  • 8.7.2 平衡二叉树实现算法
  • 8.8 多路查找树(B 树)
  • 8.8.1 2-3 树
  • 8.8.2 2-3-4 树
  • 8.8.3 B 树
  • 8.8.4 B+ 树
  • 8.9 散列表查找(哈希表)概述
  • 8.9.1 散列表查找定义
  • 8.9.2 散列表查找步骤
  • 8.10 散列函数的构造方法
  • 8.10.1 直接定址法
  • 8.10.2 数字分析法
  • 8.10.3 平方取中法
  • 8.10.4 折叠法
  • 8.10.5 除留余数法
  • 8.10.6 随机数法
  • 8.11 处理散列冲突的方法
  • 8.11.1 开放定址法
  • 8.11.2 再散列函数法
  • 8.11.3 链地址法
  • 8.11.4 公共溢出区法
  • 8.12 散列表查找实现
  • 8.12.1 散列表查找算法实现
  • 8.12.2 散列表查找性能分析
  • 8.13 总结回顾
  • 8.14 结尾语

第 9 章 排序

  • 9.1 开场白
  • 9.2 排序的基本概念与分类
  • 9.2.1 排序的稳定性
  • 9.2.2 内排序与外排序
  • 9.2.3 排序用到的结构与函数
  • 9.3 冒泡排序
  • 9.3.1 最简单排序实现
  • 9.3.2 冒泡排序算法
  • 9.3.3 冒泡排序优化
  • 9.3.4 冒泡排序复杂度分析
  • 9.4 简单选择排序
  • 9.4.1 简单选择排序算法
  • 9.4.2 简单选择排序复杂度分析
  • 9.5 直接插入排序
  • 9.5.1 直接插入排序算法
  • 9.5.2 直接插入排序复杂度分析
  • 9.6 希尔排序
  • 9.6.1 希尔排序原理
  • 9.6.2 希尔排序算法
  • 9.6.3 希尔排序复杂度分析
  • 9.7 堆 排 序
  • 9.7.1 堆排序算法
  • 9.7.2 堆排序复杂度分析
  • 9.8 归并排序
  • 9.8.1 归并排序算法
  • 9.8.2 归并排序复杂度分析
  • 9.8.3 非递归实现归并排序
  • 9.9 快速排序
  • 9.9.1 快速排序算法
  • 9.9.2 快速排序复杂度分析
  • 9.9.3 快速排序优化
  • 1.优化选取枢轴
  • 2.优化不必要的交换
  • 3.优化小数组时的排序方案
  • 4.优化递归操作
  • 9.10 总结回顾
  • 9.11 结尾语
  • 附录 参考文献

AXIHE / 精选教程

浏览全部教程

HTML

CSS

JS

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

如果你加我的私人微信,麻烦写上您的 称呼,所在地区,职业,方便我备注,谢谢


本站的微信公众号

阿西河前端教程

Anbang

安邦的私人微信

微信号: yaolushan

Anbang

Bilibili(B站)

朱安邦

Anbang