数据结构是一种具有一定逻辑关系,在计算机中应用某种存储结构,并且封装了相应操作的数据元素集合,常用的数据结构有以下8种:
链表
链表是一种非常常见的数据结构,有多种扩展的链表:
- 单向链表
- 双向链表
- 循环链表
链表的特点是:
- 添加删除数据很方便,因为只需要移动指针的指向,然后操作目标元素即可,复杂度为O(1)
- 查找数据,速度很慢,复杂度为 O(1)
- 链表的数据存储是分散的,无需存储在连续的内存空间中
适用场景:数据量较小,需要频繁增加,删除操作的场景
数组
数组也是线性排列的一种数据结构。
数组的特点是:
- 查找数据,速度很快,复杂度为 O(1)
- 添加删除数据很慢,因为需要移动元素,复杂度为 O(n)
- 数组是存储在一片连续的内存空间中,每个数据的内存地址都可以通过数组下标计算出来
适用场景:频繁查询,对存储空间要求不大,较少增加和删除的场景
栈
栈也是一种数据呈线性排列的数据结构。
栈的特点是:
- 元素只能通过一端进行访问
- 先进后出(最先进入的元素,只能最后取出)
队列
队列是类似栈的数据结构。
队列的特点是:
- 元素可以通过两端进行访问
- 先进先出(最先进入的元素,最先取出
哈希表
哈希表是根据键值对直接进行访问的数据结构。
哈希表的特点是:
- 查找数据,速度很快
- 无法做范围查找
堆
堆是一种图的树形结构。
堆的特点是:
- 每个结点最多有两个子结点
- 子结点必须大于父结点
- 堆中最顶端的数据始终最小,无论数据量有多少,取出最小值的时间复杂度都为O(1)
- 取出数据,需要将最后的数据移动到最顶端,一边与子结点比较大小,一边往下移动,复杂度为O(logn)
- 添加数据,一边与父结点比较大小,一边往上移动,复杂度为O(logn)
树
二叉查找树(又叫二叉搜索树或二叉排序树)是一种图形的数据结构。
二叉查找树的特点是:
- 每个结点最多有两个子结点
- 每个结点的值均大于左子树上任意一个结点的值
- 每个结点的值均小于右子树上任意一个结点的值
图
图是由结点的有穷集合V和边的集合E组成,图的数据结构比较复杂,在存储数据上有着比较复杂和高效的算法,分别有邻接矩阵 、邻接表、十字链表、邻接多重表、边集数组等存储结构。