一本适合自学数据结构的书。
关键字
数据结构介绍,算法推导大O阶的方法,线性表结构的介 绍,顺序结构与链式结构差异,栈与队列的应用,串的朴素模式匹配、 KMP模式匹配算法,树结构的介绍,二叉树前中后序遍历,线索二叉 树,赫夫曼树及应用,图结构的介绍,图的深度、广度遍历,最小生成 树两种算法,最短路径两种算法,拓扑排序与关键路径算法,查找应用 的相关介绍,折半查找、插值查找、斐波那契查找等静态查找,稠密索 引、分块索引、倒排索引等索引技术,二叉排序树、平衡二叉树等动态 查找,B树、B+树技术,散列表技术,排序应用的相关介绍,冒泡、选 择、插入等简单排序,希尔、堆、归并、快速等改进排序,各位排序算法的对比。
要求
- 有一门编程语言基础,比如C、Python、Ruby、JavaScript、Java等任意一种编程语言即可。
- 有一定的数学修养和逻辑思维能力。
阅读越主动,效果越好。
本书的研读方法:
- 复习C语言的基础知识。
- 通读本书
- 阅读时,摘抄是非常好的习惯
- 阅读每一章时,一定要在电脑中运行代码
第一章绪论
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
逻辑结构:是指数据对象中数据元素之间的相互关系。
物理结构:是指数据在逻辑结构在计算机中的存储形式。
数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。
抽象数据类型:ADT,是指一个数学模型及定义在该模型上的一组操作。抽吸数据类型的定义取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关。
第二章 算法
算法:是解决特定问题求解步骤的描述,在计算机中变现为指令的有限序列,并且每条指令表示一个或多个操作。
算法的五个基本特性
- 输入
- 输出
- 有穷性
- 确定性
- 可行性
程序在计算机上运行时所消耗的时间取决于下列因素:
- 算法采用的策略、方法。
- 编译产生的代码质量
- 问题的输入规模
- 机器执行执行的速度。
常见的时间复杂度所耗时间的大小排列:
O(1)
第三章 线性表
线性表:零个或多个数据元素的有限序列。
线性表
- 顺序存储结构
- 链式存储结构
-
- 单链表
- 静态链表
- 循环链表
- 双向链表
第四章 栈与队列
栈:是限定仅在表尾进行插入和删除操作的线性表。
队列:是只允许在一段进行插入操作、而在另一端进行删除操作的新型表。
栈
- 顺序栈
-
- 两栈共享空间
- 链栈
队列
- 顺序队列
-
- 循环队列
- 链队列
第五章 串
串:是由零个或多个字符组成的有限序列,又名叫字符串。
KMP算法
第六章 树
树:是n(n>=0)个节点的有限集。n = 0 时称为空树 。在任意一颗非空树中:
(1)有且仅有一个特定的称为根(Root)的节点;
(2)当 n > 1 时,其余节点可分为 m (m > 0)个互不相交的有限集 T1、T2、……、Tm,其中每个集合又是一棵树,并且称为根的子树(SubTree)。
树的存储结构:
- 双亲表示法
- 孩子表示法
- 孩子兄弟表示法
二叉树。
第七章 图
图:是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G 表示一个图,V 是图 G 中顶点的集合,E 是图 G 中边的集合。
图的存储结构
- 邻接矩阵
- 邻接表
- 边集数组
- 十字链表
- 邻接多重表
有人在通往牛逼的路上一路狂奔, 而有人步入大学校园/社会就学会放弃。
第八章 查找
查找:就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。
第9章 排序
排序: 假设含有n个记录的序列为{r1,r2,......,rn},其相应的关键字分别为{k1,k2,......,kn},需确定1,2,......,n的一种排列p1,p2,......,pn,使其相应的关 键字满足kp1≤kp2≤......≤kpn(非递减或非递增)关系,即使得序列成为一 个按关键字有序的序列
{rp1,rp2,......,rpn},这样的操作就称为排序。
排序
- 插入排序类
-
- 直接插入排序
- 希尔排序
- 选择排序类
-
- 简单选择排序
- 堆排序
- 交换排序类
-
- 冒泡排序
- 快速排序
- 归并排序类
-
- 归并排序
如果你有梦想的话,就要去捍卫它。当别人做不到的时候,他们就想要告诉你,你也不能。如果你想要些什么,就得去努力争取。就这样!N