高效记忆之数据结构分类

第一步 那就分个类

数据结构从逻辑上划分为三种基本类型:线性结构、树型结构和图型结构
详细分类如下:

  1. 数组
  2. 队列
  3. 链表
  4. 散列表

数组

数组是有序的元素序列,常用于存储相同类型的数据的集合(只能存储一种类型的数据)
数组是可以在内存中连续存储多个元素的结构,(大小固定,无法扩容。例如int[] sub=new int [100],数组长为100)
在内存中的分配也是连续的,(执行插入删除操作时,会移动其他的元素)
数组中的元素通过数组下标进行访问,数组下标从0开始。
例如:a[0]

试用场景:频繁查询,对存储空间要求不大,很少增加和删除的情况。

栈(堆栈)(先入后出)

栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。
从栈顶放入元素的操作叫入栈,取出元素叫出栈。
插入一般称为进栈(PUSH),删除则称为退栈(POP)。

队列(先入先出)

队列是一种线性表,队列可以在一端添加元素,在另一端取出元素。
从一端放入元素的操作称为入队,取出元素为出队,

使用场景:因为队列先进先出的特点,在多线程阻塞队列管理中非常适用。

链表

链表是物理存储单元上非连续的、非顺序的存储结构,
数据元素的逻辑顺序是通过链表的指针地址实现,
每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。
根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。

链表的优点:
不需要初始化容量,可以任意加减元素;
添加或者删除元素时只需要改变前后两个元素结点的指针域指向地址。
添加,删除很快;

缺点:
因为含有大量的指针域,占用空间较大;
查找元素需要遍历链表来查找,非常耗时。

适用场景:
数据量较小,需要频繁增加,删除操作的场景

树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。
二叉树是一种比较有用的折中方案,它添加,删除元素都很快,并且在查找方面也有很多的算法优化,所以,二叉树既有链表的好处,也有数组的好处,是两者的优化方案,在处理大批量的动态数据方面非常有用。

扫描二维码关注公众号,回复: 11373591 查看本文章

二叉树有很多扩展的数据结构,包括平衡二叉树、红黑树、B+树等,
mysql的数据库索引结构用的就是B+树,
HashMap的底层源码中用到了红黑树。

散列表

散列表,也叫哈希表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。
哈希表是基于数组衍生的数据结构,在添加删除元素方面是比较慢的,所以很多时候需要用到一种数组链表来做,也就是拉链法。拉链法是数组结合链表的一种结构。从图中可以看出,左边很明显是个数组,数组的每个成员包括一个指针,指向一个链表的头,当然这个链表可能为空,也可能元素很多。我们根据元素的一些特征把元素分配到不同的链表中去,也是根据这些特征,找到正确的链表,再从链表中找出这个元素。

堆:堆就是用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。
堆总是一棵完全二叉树。

主要用来查询最大值或最小值(最重要的元素),对应大顶堆和小顶堆。

使用堆的目的是将最大或最小的节点放在最前面,从而快速的进行相关插入、删除操作。
图片中的数字不是节点的值,而是存储这个节点的数组索引

parent(i) = floor((i - 1)/2)
left(i)   = 2i + 1
right(i)  = 2i + 2

并不是每一个最小堆都是一个有序数组!要将堆转换成有序数组,需要使用堆排序。

在计算机科学中,一个图就是一些顶点的集合,这些顶点通过一系列边结对(连接)。顶点用圆圈表示,边就是这些圆圈之间的连线。顶点之间通过边连接。

图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。

图的两种表现方法
邻接列表:在邻接列表实现中,每一个顶点会存储一个从它这里开始的边的列表。
邻接列表只描述了指向外部的边。A 有一条边到B,但是B没有边到A,所以 A没有出现在B的邻接列表中。查找两个顶点之间的边或者权重会比较费时,因为遍历邻接列表直到找到为止。

邻接矩阵:在邻接矩阵实现中,由行和列都表示顶点,由两个顶点所决定的矩阵对应元素表示这里两个顶点是否相连、如果相连这个值表示的是相连边的权重。
往这个图中添加顶点的成本非常昂贵,因为新的矩阵结果必须重新按照新的行/列创建,然后将已有的数据复制到新的矩阵中。

猜你喜欢

转载自blog.csdn.net/weixin_39225682/article/details/106943757
今日推荐