1、数据结构-知识体系-简介
1、数据结构-知识体系-简介
1-1、数据结构之**线性结构**:首先理解数据结构中线性结构及其延伸:数组和矩阵,链表,栈和队列等。
1-1-1、线性表 - 数组和矩阵 数组是一种连续存储线性结构,元素类型相同,大小相等,数组是多维的,通过使用整型索引值来访问他们的元素,数组尺寸不能改变
1-1-2、线性表 - 链表 n个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点,每个节点只有一个后续节点,首节点没有前驱节点,尾节点没有后续节点。确定一个链表我们只需要头指针,通过头指针就可以把整个链表都能推出来
1-1-3、线性表(散列) - 哈希表 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
1-1-4、线性表 - 栈和队列 数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用。
1-2、数据结构之**逻辑结构**:[**树**]:然后理解数据结构中逻辑结构之树:二叉搜索树(BST),平衡二叉树(AVL),红黑树(R-B Tree),哈夫曼树,前缀树(Trie)等。
1-2-1、树 - 基础和Overview 树在数据结构中至关重要,这里展示树的整体知识体系结构和几种常见树类型
1-2-2、树 - 二叉搜索树(BST) 本文主要介绍 二叉树中最基本的二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
1-2-3、树 - 平衡二叉树(AVL) 平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。 最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。
1-2-4、树 - 红黑树(R-B Tree) 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组,是平衡二叉树和AVL树的折中。 树 - 哈夫曼树 哈夫曼又称最优二叉树, 是一种带权路径长度最短的二叉树。
1-2-5、树 - 前缀树(Trie) Trie,又称字典树、单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。
1-3、数据结构之**逻辑结构**:[**图**]:最后理解数据结构中逻辑结构之图:图基础,图的遍历,最小生成树(Prim & Kruskal),最短路径(Dijkstra & Frolyd),拓扑排序(Topological sort),AOE & 关键路径等。
1-3-1、图 - 基础和Overview 图(Graph)是由顶点和连接顶点的边构成的离散结构。在计算机科学中,图是最灵活的数据结构之一,很多问题都可以使用图模型进行建模求解。例如: 生态环境中不同物种的相互竞争、人与人之间的社交与关系网络、化学上用图区分结构不同但分子式相同的同分异构体、分析计算机网络的拓扑结构确定两台计算机是否可以通信、找到两个城市之间的最短路径等等。
1-3-2、图 - 遍历(BFS & DFS) 图的深度优先搜索(Depth First Search),和树的先序遍历比较类似; 广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索"
1-3-3、图 - 最小生成树(Prim & Kruskal) Kruskal算法是从最小权重边着手,将森林里的树逐渐合并;prim算法是从顶点出发,在根结点的基础上建起一棵树
1-3-4、图 - 最短路径(Dijkstra & Frolyd) 最短路径有着广泛的应用,比如地图两点间距离计算,公交查询系统,路由选择等 图 - 拓扑排序(Topological sort) 拓扑排序主要用来解决有向图中的依赖解析(dependency resolution)问题
1-3-5、图 - AOE & 关键路径 关键路径在项目管理计算工期等方面有广泛等应用,提升工期就是所见缩减所有关键路径上的工期,并且在实现时需要应用到之前拓扑排序的算法(前提: 有向无环图,有依赖关系)。
2、详细大纲:
[https://www.pdai.tech/md/algorithm/alg-basic-overview.html]
1.1、数据结构-知识体系-示意图
2、数据结构-入门推荐
1、数据结构-入门推荐-学习
1-1、强烈推荐用动画学习算法 Data Structure Visualizations
[https://www.cs.usfca.edu/~galles/visualization/Algorithms.html]
1-2、推荐一个学习数据结构的英文网站 Java Point - DS
[https://www.javatpoint.com/data-structure-tutorial]
1-3、推荐Github上java算法集合 TheAlgorithms - Java
[https://github.com/TheAlgorithms/Java]
1-4、推荐@skywang12345写的数据结构 skywang12345 - DS
[https://www.cnblogs.com/skywang12345/p/3603935.html]
1-5、推荐@QG-whz数据结构图画的好 QG-whz
[https://www.cnblogs.com/QG-whz/p/5170147.html]
1-6、推荐@亦海数据结构的文章,写的很清晰 亦海 - DS
[https://www.cnblogs.com/lisen10/category/1415992.html]
3、数据结构-进阶推荐
1、数据结构-进阶推荐
1-1、@July结构之法 算法之道 July - 结构之法 算法之道
[https://blog.csdn.net/v_JULY_v]
4、数据结构-参考文章
1、数据结构-参考文章
1-1、[https://www.pdai.tech/md/algorithm/alg-basic-overview.html]
1-2、[https://www.cnblogs.com/small-boy/p/8039007.html]
1-3、[https://www.jianshu.com/p/5c84f7b6c354]
1-4、[https://blog.csdn.net/flowing_wind/article/details/81431354]