Logo
Section 1 / 2

线性与非线性数据结构概述

在本节课中,你将回顾所学所有数据结构的时间复杂度,并将它们分类为线性数据结构和非线性数据结构。

导入

线性与非线性数据结构概述

在本节课中,你将回顾所学所有数据结构的时间复杂度,并将它们分类为线性数据结构和非线性数据结构。

现在你已经学习了所有常见的数据结构,让我们来看看哪些是线性数据结构,哪些是非线性数据结构。了解这一点有助于你在设计算法时选择合适的数据结构。

线性数据结构

在线性数据结构中,每个元素最多与一个(下一个元素)或两个(前一个和下一个)其他元素相连。遍历这些结构时是线性的,因此插入、删除和查找操作的时间复杂度为 O(n)。

数组、链表、栈 和 队列 都是线性数据结构的例子。

非线性数据结构

非线性数据结构与线性数据结构正好相反。在非线性数据结构中,每个元素可以连接到多个其他元素。遍历不是线性的,因此查找、插入和删除操作的时间复杂度可以达到 O(log n),甚至 O(1)。

树、图 和 哈希表 都是非线性数据结构的例子。

时间与空间复杂度速查表

以下是本课程所学数据结构的复杂度快速回顾表,帮助你在不同场景下比较它们的性能表现。

注意: 表中的 n 表示结构中存储的总元素数量。

数据结构插入(平均/最坏)删除(平均/最坏)查找(平均/最坏)空间复杂度(最坏)
数组O(n)O(n)O(n)O(n)
单向链表O(1)O(n)O(n)O(n)
双向链表O(1)O(n)O(n)O(n)
栈O(1)O(1)O(n)O(n)
队列O(1)O(1)O(n)O(n)
二叉堆O(log n)O(log n)(removeMax() 或 removeMin())O(n)O(n)
二叉树O(n)O(n)O(n)O(n)
二叉搜索树O(log n) / O(n)O(log n) / O(n)O(log n) / O(n)O(n)
红黑树O(log n)O(log n)O(log n)O(n)
AVL 树O(log n)O(log n)O(log n)O(n)
2-3 树O(log n)O(log n)O(log n)O(n)
哈希表O(1) / O(n)O(1) / O(n)O(1) / O(n)O(n)
字典树(Trie)O(n)O(n)O(n)O(n)

图数据结构的复杂度

E=边的数量E = 边的数量
V=顶点的数量V = 顶点的数量

操作邻接表邻接矩阵
添加顶点O(1)O(V²)
删除顶点O(V + E)O(V²)
添加边O(1)O(1)
删除边O(E)O(1)
深度优先搜索O(V + E)O(V²)
广度优先搜索O(V + E)O(V²)
空间复杂度O(V + E)O(V²)

哈希简介

结论