小艾的自留地

Stay foolish, Stay hungry

数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素集合,常用的数据结构有以下8种:

链表

链表是一种非常常见的数据结构,有多种扩展的链表:

  • 单向链表
  • 双向链表
  • 循环链表

链表的特点是:

  • 添加删除数据很方便,因为只需要移动指针的指向,然后操作目标元素即可,复杂度为O(1)
  • 查找数据,速度很慢,复杂度为 O(1)
  • 链表的数据存储是分散的,无需存储在连续的内存空间中

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

数组

数组也是线性排列的一种数据结构。

数组的特点是:

  • 查找数据,速度很快,复杂度为 O(1)
  • 添加删除数据很慢,因为需要移动元素,复杂度为 O(n)
  • 数组是存储在一片连续的内存空间中,每个数据的内存地址都可以通过数组下标计算出来

适用场景:频繁查询,对存储空间要求不大,较少增加和删除的场景

栈也是一种数据呈线性排列的数据结构。

栈的特点是:

  • 元素只能通过一端进行访问
  • 先进后出(最先进入的元素,只能最后取出)

队列

队列是类似栈的数据结构。

队列的特点是:

  • 元素可以通过两端进行访问
  • 先进先出(最先进入的元素,最先取出

哈希表

哈希表是根据键值对直接进行访问的数据结构。

哈希表的特点是:

  • 查找数据,速度很快
  • 无法做范围查找

堆是一种图的树形结构。

堆的特点是:

  • 每个结点最多有两个子结点
  • 子结点必须大于父结点
  • 堆中最顶端的数据始终最小,无论数据量有多少,取出最小值的时间复杂度都为O(1)
  • 取出数据,需要将最后的数据移动到最顶端,一边与子结点比较大小,一边往下移动,复杂度为O(logn)
  • 添加数据,一边与父结点比较大小,一边往上移动,复杂度为O(logn)

二叉查找树(又叫二叉搜索树或二叉排序树)是一种图形的数据结构。

二叉查找树的特点是:

  • 每个结点最多有两个子结点
  • 每个结点的值均大于左子树上任意一个结点的值
  • 每个结点的值均小于右子树上任意一个结点的值

图是由结点的有穷集合V和边的集合E组成,图的数据结构比较复杂,在存储数据上有着比较复杂和高效的算法,分别有邻接矩阵 、邻接表、十字链表、邻接多重表、边集数组等存储结构。

评论