前言:
普及一下顺序存储结构与链表存储结构。对应八大数据结构的数组和链表。
1)顺序存储结构的内存地址一定是连续的。
优点:存储密度大(=1),存储空间利用率高。
缺点:插入或删除元素时不方便。
2)链表存储结构的内存地址不一定是连续的。
优点:插入或删除元素时很方便。
缺点:存储密度小(<1),存储空间利用率低。
八大数据结构:
- 【数组】(顺序存储结构)
const arr = new Aarray(100);
arr[0] = 1;
优点:
1、按照索引查询元素速度快
2、按照索引遍历数组方便
缺点:
1、数组的大小固定后就无法扩容了
2、数组只能存储一种类型的数据
3、添加,删除的操作慢,因为要移动其他的元素。
适用场景:
频繁查询,对存储空间要求不大,很少增加和删除的情况。
- 【链表】(链表存储结构)
链表的优点:
不需要初始化容量,可以任意加减元素;
添加或者删除元素时只需要改变前后两个元素结点的指针域指向地址即可,所以添加,删除很快;
缺点:
因为含有大量的指针域,占用空间较大;
查找元素需要遍历链表来查找,非常耗时。
适用场景:
数据量较小,需要频繁增加,删除操作的场景
- 【队列】
a. 栈的特点是:先进先出。
b. 适用于多线程阻塞队列管理中。
- 【栈】(顺序存储结构与链式存储结构两种)
a. 栈的特点是:先进后出。
b. 栈的插入称为进栈push
。栈的删除称为出栈pop
。
c. 栈常应用于实现递归功能方面的场景,例如斐波那契数列。
- 【树】(二叉树是数组和链式结合的方法,添加,删除,查找都很快)
定义:由n(n>=1)个有限节点组成一个具有层次关系的集合;根朝上,叶朝下。
- 【树】(二叉树是数组和链式结合的方法,添加,删除,查找都很快)
相对本节点较小的值保存在左节点,相对本节点较大的值保存在右节点。
对于一个树高为h的二叉树,如果其第0层至第h-1层的节点都满。如果最下面一层节点不满,则所有的节点在左边的连续排列,空位都在右边。
左子树高度 - 右子树高度 <=1 。(ps:子树高度计算,取最大节点数即可)。
当节点的平衡因子大于2时,说明是左子树深度偏大,此时需要右旋或者左右旋。小于2则反之。
- 。【堆】
定义:n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。
(ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4…n/2)。
特点:
a. 堆是一棵完全二叉树
b. 从树根到子树数据分为从大到小(大顶堆),或者从小到大(小顶堆)
- 【散列图】
也叫哈希表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。
- 【散列图】
- 【图】
图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。
按照顶点指向的方向可分为无向图和有向图:
- 【图】
网友评论