高效记忆之数据结构分类

第一步 那就分个类

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

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

数组

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

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

栈(堆栈)(先入后出)

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

队列(先入先出)

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

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

链表

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

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

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

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

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

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

散列表

散列表,也叫哈希表,是根据关键码和值 (key和value) 直接进行访问的数据结构,通过key和value来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。
哈希表是基于数组衍生的数据结构,在添加删除元素方面是比较慢的,所以很多时候需要用到一种数组链表来做,也就是拉链法。拉链法是数组结合链表的一种结构。高效记忆之数据结构分类